如何在所有目录和子目录中用另一个表达式替换带有正斜杠的表达式?
我用它找到: grep -rnw "/var/www/site" -e "app/COD1"
现在我想在所有文件中用“app2/COD2”替换“app/COD1”。
我 cd 到目录 /var/www/site 并尝试使用:sed -i 's,app/COD1,app2/COD2,g' *
但sed -i 's/'app/ABC'/'apps/ABC'/g' *
没有成功......
答案1
您需要-e
在命令行上指定命令的选项。鉴于此,以下方法对我有用:
$ cat file.txt
app/COD1
app/COD2
app2/COD1
app/COD1
app/COD1
$ sed -i -e "s,app/COD1,app2/COD2,g" file.txt
$ cat file.txt
app2/COD2
app/COD2
app2/COD1
app2/COD2
app2/COD2
如果您要替换可能带有逗号(或您选择的任何分隔符)的内容,使用反斜杠也是可行的:
$ sed -i -e "s/app\\/COD1/app2\\/COD2/" file.txt
答案2
grep -rl 'app/ABC' /opt/apps/ABC | xargs sed -i -e "s,app/ABC,apps/ABC,g"