![如何为任何输出添加“双倍行距”?](https://linux22.com/image/122322/%E5%A6%82%E4%BD%95%E4%B8%BA%E4%BB%BB%E4%BD%95%E8%BE%93%E5%87%BA%E6%B7%BB%E5%8A%A0%E2%80%9C%E5%8F%8C%E5%80%8D%E8%A1%8C%E8%B7%9D%E2%80%9D%EF%BC%9F%20.png)
我想获取 bash 命令(在本例中为 grep)的输出并每隔一行插入一个空行:
not
like
this ...
but
like
this!
在 bash 中做到这一点的聪明方法?
答案1
对于文本文件有很多方法可以做到这一点。最简单的可能是
$ sed G filename
答案2
使用pr
来自coreutils
:
$ grep '' file | pr -Td
not
like
this ...
(请注意,做最后一行双倍行距 - 与sed '$!G'
) 不同。从man pr
:
-d, --double-space
double space the output
-T, --omit-pagination
omit page headers and trailers, eliminate any pagination by form
feeds set in input files
答案3
从如下文件开始:
$ cat >file
not
like
this ...
sed 将工作:
$ sed 's/$/\n/' file
not
like
this ...
awk 也是如此:
$ awk 1 ORS='\n\n' file
not
like
this ...
1
是 awk 的 print-the-line 的神秘简写,它ORS='\n\n'
告诉 awk 用两个换行符而不是一个换行符来分隔输出行。
更多的
更短的 sed 命令,如建议的钢铁起子, 是:
sed '$!G' file
该G
命令附加一个换行符和保留空间到最后模式空间。由于默认情况下,保留空间是空的,因此这只会在每行末尾添加一个额外的换行符。前缀$!
告诉 sed 在所有行上执行此操作除了最后一个。
答案4
Test
10
20
30
Output
perl -pe "s/$/\n/" test
10
20
30