我目前正在使用以下代码
将一些示例代码附加到一组文件中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等中包含的所有其他代码行。是否有一种简单的方法可以执行此操作?
奖金问题 - 如何告诉这个脚本将'code1'添加到每个文件中的每个第4行,从第2行开始,以便文件1中的行可以读取
line1
code1line2
line3
line4
line5
code1line6
line7
line8
file2将遵循相同的模式,但附加前缀code2。
答案 0 :(得分:1)
对于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中),请咨询the Addresses section of the sed man page linked above:
:第一〜步骤
匹配从第一行开始的每一步第一行。例如,'' 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中感谢评论中的链接。