我正在寻找一个 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`