
ファイル内の Old_String を New_String に置き換えるにはどうすればいいですか?
古い文字列:
$result = $client->updateInventory("UpdateInventory.xml");新しい文字列:
$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");
file1.txt というファイルの行番号 = 5 の 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'