如何在命令行上打印的行之间添加换行符?

xen*_*ide 35 command-line logs text-processing output text-formatting

邮件日志非常难以阅读。如何在命令行上打印的每一行之间输出一个空行?例如,假设我正在搜索日志。这样,多条包装线就不会被混淆。

Chr*_*sen 59

sed G 
# option: g G    Copy/append hold space to pattern space.
Run Code Online (Sandbox Code Playgroud)

G不经常使用,但非常适合此目的。sed维护两个缓冲区空间:“模式空间”和“保持空间”。通过处理的线的sed通常流经图案空间的各种命令其内容(操作s///p等); 保持空间一开始是空的,只被某些命令使用。

G命令将换行符和保留空间的内容附加到模式空间。上面的sed程序从未在保留空间中放置任何内容,因此G有效地仅在处理的每一行后附加一个换行符。

  • -e 不是必需的。管道`随便| sed G` 应该可以解决问题。 (3认同)

Kei*_*thB 9

使用 awk 添加额外的换行符。这还可以让您过滤掉不想要的东西。

awk '{print $0,"\n"}' | less
Run Code Online (Sandbox Code Playgroud)


fsc*_*itt 7

使用 sed 并单独替换整行加上一个额外的换行符:

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"
Run Code Online (Sandbox Code Playgroud)

  • 一个稍微简单的 sed 替换是 's/$/\n/',尽管 @Chris Johnsen 的 'G' 命令更简单。 (4认同)