4

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

代替:

<?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 来代替。

谢谢!

4

3 回答 3

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
于 2012-10-24T07:25:05.080 回答
0

一种使用方式sed

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

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

于 2012-10-24T06:56:40.417 回答
0

sed,稍微调整了您的解决方案:

sed  '/<?php/{N;s/\n$r = session_start();/\nheader(\"Location: index.php\");/}' file
于 2012-10-24T07:00:17.470 回答