sed:替换一块文本

时间:2012-10-24 06:32:51

标签: bash unix replace sed awk

我有一堆文件,从一段代码开始,我试图用另一个代替。

替换:

<?php
$r = session_start();
(more lines)

使用:

<?php
header("Location: index.php");
(more lines of code)

所以我试图将块与sed 's/<?php\n$r = session_start();/<?php\nheader...匹配,但它不起作用。

我将非常感谢这里发生的事情的帮助以及如何实现这一目标。我正在考虑用python来做这件事。

谢谢!

3 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed -i '1i\
This is a\
new block of\
code
1,/$r = session_start();/d' file 

或者如果您希望将新代码放在文件中:

sed -i '1r replacement_code_file
1,/$r = session_start();/d' file

全部在一条线上:

sed -i -e '1r replacement_code_file' -e '1,/$r = session_start();/d' file

答案 1 :(得分:0)

使用sed的一种方式:

cat block.txt <(sed '1,/$r = session_start();/d' file.txt) > newfile.txt

只需将要添加到每个文件的文本块添加到block.txt即可。 sed组件只删除第一行和匹配模式之间的行。

答案 2 :(得分:0)

sed,稍微调整一下你的解决方案:

sed  '/<?php/{N;s/\n$r = session_start();/\nheader(\"Location: index.php\");/}' file