linux - sed - 删除两个空行之前的文本

标签 linux bash perl awk sed

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

任何人都可以帮助使用 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)

提前致谢。

最佳答案

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

关于linux - sed - 删除两个空行之前的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49502534/

相关文章:

python - 需要帮助将 perl 正则表达式转换为 python

perl - 如何在不重新启动的情况下调试 mod_perl2 模块?

linux - LD_PRELOAD_PATH 用于 64 位环境中的 32 位应用程序

angular - `node-pre-gyp install` Ubuntu 18.04相关错误

c++ - 创建可部署的 CMake 动态 SDL2 应用程序

linux - csh echo foreach 循环索引

git - 尝试推送到 GitHub,现在收到 'fatal: bad default revision'

linux - 运行影响父 shell 的 bash 命令

macos - 在 OSX/bash 上查找并替换文件中的文本

regex - 在两个标记字符串之间的字符串中查找/替换正则表达式模式