使用Sed在第一次出现模式之前插入文件中的特定行

时间:2015-09-24 13:45:27

标签: command-line sed text-processing

我想从一个文件中插入一系列行,比如210,221r之前的某些其他文件中的第一次出现模式。

由于我显然不是GNU sed专家,我无法想象如何做到这一点。

我试过

sed '0,/pattern/{210,221r file
}' bunch_of_files

但显然file从第210行读到EOF。

2 个答案:

答案 0 :(得分:1)

试试这个:

sed -r 's/(FIND_ME)/PUT_BEFORE\1/' test.text
  • -r enables扩展正则表达式
  • 您要查找的字符串(“FIND_ME”)位于括号内,用于创建捕获组
  • \1将捕获的文本放入替换文件中。

关于你的第二个问题:你可以从像这样的文件中读取替换*:

sed -r 's/(FIND_ME)/`cat REPLACEMENT.TXT`\1/' test.text

如果事先用REPLACEMENT.TXT替换sed内的特殊字符,那么你就是黄金。

* =这取决于您的终端仿真器。它适用于bash。

答案 1 :(得分:0)

https://stackoverflow.com/a/11246712/4328188 CodeGnome给了一些" sed black magic" :

  

为了在模式之前插入文本,您需要在读入文件之前将模式空间交换到保留空间。例如:

$ sudo gem install cocoapods
[...]
1 gem installed
$ export PATH=$PATH:/Library/Ruby/bin
$ pod --version
0.38.2

但是,要从sed '/pattern/ { h r file g N }' in 读取特定的行,可能必须使用类似于虚拟答案的双呼叫解决方案。如果有可能,我会很高兴知道一个通​​话解决方案。