如何搜索和替换目录及其子目录中所有 php 文件中的文本

如何搜索和替换目录及其子目录中所有 php 文件中的文本

我正在寻找一个 shell 脚本,它递归地遍历.php目录中的所有文件并执行特定文本模式的搜索和替换。

搜索模式相当长(> 5000 个字符),因此为了方便起见,可以将其保存在另一个文本文件中。此外,它还包含正斜杠字符。

编辑:我想我明白了第一部分:

find . -name "*.php"

但那么我如何在这些文件中搜索和替换呢?

答案1

通过 sed 和 xargs 的良好组合可以轻松完成此操作。

find . -name "*.php" | xargs -n 1 echo

将向您展示 xargs 的强大功能。

之后,您可以在示例文件上使用就地更改 (-i) 或备份更改 (-i.bak) 来测试正则表达式。如果您的模式/替换已经有一个字符,您还可以使用其他字符来替换“/”。

最后,它应该看起来像:

pattern=`cat /path/to/pattern`; replacement=`cat /path/to/replacement`
find . -name "*.php" | xargs -n 1 sed -i -e "s|$pattern|$replacement|g"

答案2

尝试:

find . -name "*.php" -exec sed -i "s/$(cat /path/to/pattern.txt)/$(cat /path/to/replacement.txt)/g" {} \;

其中pattern是要搜索的模式,replacement是要替换它的文本。

“就地”编辑文件-i的选项。sed如果您想在编辑之前创建文件的备份,请使用-i'.bak'.

答案3

perl -p -i -e 's/originalString/targetString/g' `find . -name '*' -type f`

相关内容