ファイルでOld_StringをNew_Stringに置き換えるには?
前の文字列:
$result = $client->updateInventory("UpdateInventory.xml");新しい文字列:
$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");
行番号 = 5 の file1.txt というファイルの Old_String
私が試したこと:
sed '5s/.*/'$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");'/' file1.txt
答え1
次のコマンドを使用すると、同じ効果を得ることができます
sed "5s:.*:'$'result = '$'client->updateInventory('/Desktop/new/UpdateInventory.xml');:g" filename | sed "s:'$':$:g" | tr "'" '"'
答え2
内部単一引用符を削除します。外部コマンドを終了するので、$result
拡張され、完了していないコマンドsed
について文句を言うことができます。s
s
代わりに、スラッシュの代わりにほぼすべてを使用して、コマンドに異なる区切り文字を使用できます。だから
sed '5s_.*_$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");_' file1.txt
あなたが望むもの。
答え3
別の方法は、c
次のコマンドを使用してアドレスで指定された行をクリアすることです。
$ seq 5 | sed '2c\
foobar'
1
foobar
3
4
5
$ # with GNU-sed, assuming \ is not first character
$ seq 5 | sed '2cfoobar'
s
代替文字列に特殊文字がある場合とコマンドの両方c
に問題があります。たとえば、次のようになります。
$ seq 3 | sed '2s/.*/abc&xyz/'
1
abc2xyz
3
$ seq 3 | sed '2cabc\tabc'
1
abc abc
3
この問題を処理する安定した方法は、r
次のコマンドを使用することです。
$ echo 'foo&\t\n\1///\\xyz' > f1
$ seq 3 | sed -e '2rf1' -e '2d'
1
foo&\t\n\1///\\xyz
3
答え4
awkコマンドを使用して結果を取得することもできます。
awk ‘NR==5 {gsub(".*","$result = $client->updateInventory(/Desktop/new/UpdateInventory.xml);",$0);print $0}' filename| sed 's/(/&"/g' | sed 's/)/"&/g'