56

ファイル内の行を見つけて、次の行を特定の値に置き換えようとしています。sed を試してみましたが、\n が気に入らないようです。これは他にどのように行うことができますか?

ファイルは次のようになります。

<key>ConnectionString</key>
<string>anything_could_be_here</string>

そして、私はそれをこれに変更したいと思います

<key>ConnectionString</key>
<string>changed_value</string>

これが私が試したことです:

sed -i '' "s/<key>ConnectionString<\/key>\n<string><\/string>/<key>ConnectionString<\/key>\n<string>replaced_text<\/string>/g" /path/to/file
4

3 に答える 3

63

片道:サンプルファイル

$ cat file
Cygwin
Unix
Linux
Solaris
AIX

sed を使用して、パターン「Unix」の後の次の行を「hi」に置き換えます。

$ sed '/Unix/{n;s/.*/hi/}' file
Cygwin
Unix
hi
Solaris
AIX

特定の質問について:

$ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file
<key>ConnectionString</key>
<string>NEW STRING</string>
于 2013-09-04T17:29:42.790 に答える
55

これはうまくいくかもしれません(GNU sed):

sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file

!b前のアドレス (regexp) を否定し、処理を中断して sed コマンドを終了しn、現在の行を出力してから次の行をパターン空間に読み取り、c現在の行をコマンドに続く文字列に変更します。

于 2013-09-04T20:14:16.853 に答える
5

できます。さらに、あなたが書いた場合、

sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file

2 つの n に注意してください。これは 2 行の後に置き換わります。

于 2016-03-29T15:10:11.260 に答える