在 UNIX 中在不同行数后插入空行

在 UNIX 中在不同行数后插入空行

假设我有一个包含以下数据的文件 abc.csv:

abc
def
geh
ijk
lmn
opq
rst

现在,我想在第 2 行和第 6 行之后插入空行。

请建议我应该使用哪个命令。

答案1

$ seq 10 | sed '2G;6G'
1
2

3
4
5
6

7
8
9
10

G sed命令将换行符后跟保留空间的内容(此处为空,因为我们没有在其中放置任何内容)附加到模式空间。因此,这是在匹配行下方添加空行的快速方法。

其他替代方法是aands命令:

sed '2a\

6a\
'

或者:

sed '2s/$/\
/
6s/$/\
/'

一些sed实现还支持:

sed '2s/$/\n/;6s/$/\n/'

答案2

sed -e '2a\ ' -e '6a\ ' input > output && mv output input

某些 sed(1) 风格可以-i选择“就地”对文件进行操作(但这不可移植),或者尝试sponge从 moreutils 中进行操作,但这两种方法都只是隐藏写入新文件,并且- -rename(2)系统调用mv(如果输出文件位于同一文件系统上)。

答案3

这应该有效:

awk 'NR==3||NR==7 {print " "} {print $0}' abc.csv > temporary.csv && mv temporary.csv abc.csv

答案4

您可以在 Ex 模式下使用 Vim:

ex -sc '6pu_|2pu_|x' abc.csv
  1. pu_追加空行

  2. x保存并关闭

相关内容