帮助用SED命令replace几个文件中的文本

编辑:我find了解决办法。 这个命令起作用,以防有人发现它有用。 i.bak修饰符对每个更改的文件进行备份。

find /pathoffilestochange -name "*.php" | xargs sed 's|/wrong/path/|/correct/path/|g' 

你好,

我想在几十个.php文件中改变一个path。 我不知道如何使用sed,但是我在网上的某个地方得到了这个命令,并成功地使用了它。

  find /ruta -name "*.txt" | xargs sed -i.bak 's/charset=Foo/Bar/g' 

除了现在我需要将分隔符更改为不同的字符,hece @。 这是我目前的命令:

 find /pathoffilestochange -name "*.php" | xargs sed -i.bak 's@charset=/wrong/path/@/correct/path/@g' 

它不工作,它不给任何错误,但我检查文件,他们保持不变。

我以root用户身份执行命令,这是文件所有者,权限似乎没问题,所以一定不能成为问题。 我正在运行Debian

用@replace保留的分隔符将不起作用。 你必须做的就是像这样逃避你的斜线\/\字符,你可以在正则expression式中取消一个字符的特殊含义。

所以,你的命令需要如下所示:

find /pathoffilestochange -name "*.php" | xargs sed -i.bak \ 's/charset=\/wrong\/path\//\/correct\/path\//g'

这很令人困惑,但这正是正则expression式的工作原理。

顺便说一下,在-i.bak之后的单个反斜杠,我取消了新行字符的含义,所以我可以在两行上使用这个命令以方便阅读。

你使用的是什么版本的sed? 适用于我:

 $ cat foo hello charset=/wrong/path/fcc yes $ find . -name foo | xargs sed -i.bak 's@charset=/wrong/path/@/correct/path/@g' $ cat foo hello /correct/path/fcc yes $ sed --version GNU sed version 4.2.1