我目前正在使用以下代码将一些示例代码附加到一组文件中
cd /path/to/your/files
word='code'
base=1
for file in *; do sed -i -e "s/^/$word$base/" "${file}"; base=$(( $base + 1 )); done
这会在文件1的每一行前面添加术语"code1",在文件2中包含的每一行都前面添加代码2,等等。
我真正想做的是告诉这个命令将"code1"添加到文件1、文件2等中每隔行的代码中。有简单的方法吗?
额外的问题-我如何告诉这个脚本在每个文件的每4行添加"code1",从第2行开始,这样文件1中的行就会读取
line1
code1line2
line3
line4
line5
code1line6
line7
line8
file2将遵循相同的模式,但添加前缀code2。
对于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在评论中的链接。