如何在文件中用 New_String 替换 Old_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'