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

使用する1つの方法sed

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

各ファイルに追加するテキストのブロックをに追加するだけですblock.txtsedコンポーネントは、最初の行と一致するパターンの間の行を削除するだけです。

于 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 に答える