我想在文件夹中的所有文件中递归搜索字符串。
如果找到该字符串,请将文件备份到同一位置(复制到<filename>-orig
)并用另一个字符串替换找到的字符串。
怎么做?
我可以用一个命令来完成吗?谢谢。
答案1
你可以结合两个-exec
操作find
,首先找到所有包含匹配字符串的文件,其次用 replace 关键字替换字符串(保留原始文件的备份),例如
find . -type f -exec grep -il "searchstring" {} \; -exec sed -i.bak \
's/searchstring/replacestring/' {} \;
解释 :
-exec grep -il "searchstring"
:搜索“searchsring”-exec sed -i.bak 's/searchstring/replacestring/'
:如果发现任何包含字符串的文件,则保留文件的备份并用“replacestring”替换。
请注意,在这种情况下,仅当第一个命令成功返回时才会运行第二个命令。