Bash:在每行后插入一行

Mr *_*sey 1 regex awk sed

所以,我有一个名为“burpfile”的文件。我想在每两行之后添加一个特定的行“peter”。一个示例 burpfil 可以包含:

line1
line2
line3
line4
line5
Run Code Online (Sandbox Code Playgroud)

我希望 bashscript 将其修改为:

line1
peter
line2
peter
line3
peter
line4
peter
line5
peter
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,我尝试了 sed,因为这是这篇文章中的选择:https : //stackoverflow.com/a/45964337/11155582

这是我到目前为止所得到的。但是,由于我不理解 sed,脚本仅在文件末尾插入“peter”。我不知道为什么。


nr=$(wc -l burpfil | awk '{print $1}')

for i in $(seq 0 2 $nr)
do
   sed -e '$i peter' -i burpfil
done
Run Code Online (Sandbox Code Playgroud)

正如代码片段中所见,该命令与我链接到的线程中的内容不同。那是因为在命令中有一个变量不起作用......而且我不知道如何解决它。

Bil*_*zer 5

每行之前添加:

$ echo "line1
line2
line3
line4
line5" | sed 's/^/peter\n/'
peter
line1
peter
line2
peter
line3
peter
line4
peter
line5
Run Code Online (Sandbox Code Playgroud)

sed 脚本相当简单。这是一个替换命令s/regex/replacement/。在这种情况下,正则表达式只是^,意思是“行的开头”。替换为peterplus \n,这是一个换行符特殊字符。所以它是这样写的:

在每一行之前,插入“peter”加上一个换行符

每一行添加:

$ echo "line1
line2
line3
line4
line5" | sed 's/$/\npeter/'
line1
peter
line2
peter
line3
peter
line4
peter
line5
peter
Run Code Online (Sandbox Code Playgroud)

在这里,脚本是相似的,除了正则表达式是$,这意味着“行尾”,并且换行符被替换为之前peter而不是之后。它是这样写的:

在每一行之后,添加一个换行符和单词“peter”