1

我目前正在使用以下代码将一些示例代码附加到一组文件中

cd /path/to/your/files
word='code'
base=1
for file in *; do sed -i -e "s/^/$word$base/" "${file}"; base=$(( $base + 1 )); done

这会在 file1 中的每一行前面添加术语“code1”,在文件 2 中包含的每一行前面添加 code2,等等。

我真正想做的是告诉这个命令将“code1”添加到文件 1、文件 2 等中包含的每一行代码中。有没有一种简单的方法可以做到这一点?

额外的问题 - 我如何告诉这个脚本在每个文件的第 4 行添加“code1”,从第 2 行开始,以便文件 1 中的行可以读取

line1
code1line2
line3
line4
line5
code1line6
line7
line8

file2 将遵循相同的模式,但附加前缀 code2。

4

1 回答 1

2

对于 OS X sed,没有步骤地址功能,因此您需要使用该N命令来聚合多行。

[2addr]N

将下一行输入附加到模式空间,使用嵌入的换行符将附加的材料与原始内容分开。请注意,当前行号会发生变化。

例如:

$ seq 1 10 | sed -e "{ N;s/.*/code1 &/; }"
code1 1
2
code1 3
4
code1 5
6
code1 7
8
code1 9
10

如果您使用的是 GNU sed(如在 linux 中),请参阅上面链接的 sed 手册页的地址部分

:第一步~步骤

匹配从第一行开始的每一步。例如,''sed -n 1~2p'' 将打印输入流中的所有奇数行,地址 2~5 将从第二行开始每隔五行匹配一次。首先可以为零;在这种情况下,sed 的操作就好像它等于 step。(这是一个扩展。)

演示其用途:

seq 1 10 | sed -e "1~2s/.*/code1 &/"

印刷:

code1 1
2
code1 3
4
code1 5
6
code1 7
8
code1 9
10

感谢Etan Reisner评论中的链接。

于 2014-09-09T18:59:31.700 回答