将代码附加到一组文件中的每个其他行

时间:2014-09-09 17:45:13

标签: macos bash unix terminal qiime

我目前正在使用以下代码

将一些示例代码附加到一组文件中
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。

1 个答案:

答案 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中感谢评论中的链接。