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

cla*_*amp 6 ls grep find shell-script text-processing

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

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

编辑:我想我想出了第一部分:

find . -name "*.php"
Run Code Online (Sandbox Code Playgroud)

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

Cor*_*ren 8

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

find . -name "*.php" | xargs -n 1 echo
Run Code Online (Sandbox Code Playgroud)

将向您展示 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"
Run Code Online (Sandbox Code Playgroud)


dog*_*ane 5

尝试:

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

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

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