SED:替换文本块(sed: replace a block of text)

2019-08-01 20:28发布

我有一大堆的文件,开始一个代码块,我试图用另一个替换。

更换:

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

附:

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

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

我希望在这里发生了什么,以及如何做到这一点的帮助。 我想与蟒蛇做这个来代替。

谢谢!

Answer 1:

这可能会为你工作(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


Answer 2:

使用一种方法sed

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

只需添加文本,你想添加到每个文件到块block.txt 。 的sed部件简单地删除线,所述第一线和匹配的图案之间。



Answer 3:

SED,优化了你的解决方案一点点:

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


文章来源: sed: replace a block of text