【问题标题】:sed - Remove text that precedes two blank linessed - 删除两个空行之前的文本
【发布时间】:2018-09-05 06:02:11
【问题描述】:

我需要帮助删除两个空行之前的文本。

任何人都可以通过 SED 帮助做到这一点吗?

示例:(我的日志文件) 行:“%%%% 信息 | 日期:...”

来源:

%%%% Info | Date: (11-02-18)-Day=042 - %%%%

OLD: android-902 (11-02-18 02:30)

Wi-Fi up - USB (11-02-18 03:21:21)

%%%% - Info | Date: (12-02-18)-Day=043 - %%%%

Wi-Fi up - USB (12-02-18 07:17:02)

Smart Connected (12-02-18 10:19)

%%%% - Info | Date: (13-02-18)-Day=044 - %%%%


%%%% - Info | Date: (14-02-18)-Day=045 - %%%%


%%%% - Info | Date: (15-02-18)-Day=046 - %%%%


%%%% - Info | Date: (16-02-18)-Day=047 - %%%%

Wi-Fi up - USB (16-02-18 06:32:24)

输出:

%%%% Info | Date: (11-02-18)-Day=042 - %%%%

OLD: android-902 (07-02-18 02:30)

Wi-Fi up - USB (07-02-18 03:21:21)

%%%% - Info | Date: (12-02-18)-Day=043 - %%%%

Wi-Fi up - USB (12-02-18 07:17:02)

Smart Connected (12-02-18 10:19)

%%%% - Info | Date: (16-02-18)-Day=047 - %%%%

Wi-Fi up - USB (16-02-18 06:32:24)

提前致谢。

【问题讨论】:

  • Stack Overflow 不是代码编写服务。请出示您的代码。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 在您的输出中,为什么倒数第二个非空行是%%%% - Info | Date: (16-02-18)-Day=047 - %%%% 而不是%%%% - Info | Date: (13-02-18)-Day=044 - %%%%。后者前面只有一个空行;你展示的有两个。
  • 给新人的建议:如果一个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,也可以选择投票(投票至少需要 15 声望)点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请参阅[相关帮助中心文章][1] [1]:stackoverflow.com/help/someone-answers
  • 你说得对,我犯了编辑错误。每日书签 "%%%%" 前面有两个空行: echo -e "\n\n\t%%%% - 信息 | 日期:date +"(%d-%m-%y)-Day=%j" - %%%%" >> $LOG 日志事件前面只有一行: echo -e '\n'Wi-Fi up - USB date +"(%d-%m-%y %T)" >> $LOG

标签: linux bash perl awk sed


【解决方案1】:

sed 是一个非常强大的工具,但它不是用于多行处理的最佳工具,只需使用以下awk 解决方案即可完成您的任务。

$ awk 'BEGIN{RS="%%%%[^%]+%%%%\n\n\n"}{printf "%s",$0}' input.log
%%%% Info | Date: (11-02-18)-Day=042 - %%%%

OLD: android-902 (11-02-18 02:30)

Wi-Fi up - USB (11-02-18 03:21:21)

%%%% - Info | Date: (12-02-18)-Day=043 - %%%%

Wi-Fi up - USB (12-02-18 07:17:02)

Smart Connected (12-02-18 10:19)

%%%% - Info | Date: (16-02-18)-Day=047 - %%%%

Wi-Fi up - USB (16-02-18 06:32:24)

解释:

RS="%%%%[^%]+%%%%\n\n\n"awk 用于查找每条记录的记录分隔符,当您使用默认的ORS 时,这些字段将从输出中删除并替换为\n

【讨论】:

  • 这太棒了,它在我的日志文件中运行良好,删除了一系列空记录并使其更易于控制。非常感谢。
  • @murilo.xd: 太好了,它对你有帮助,如果你对我的回答感到满意,你能把它作为正确答案吗?谢谢
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多