我如何找到所有包含某个字符串的文件,然后用另一个文件替换这些文件?

我如何找到所有包含某个字符串的文件,然后用另一个文件替换这些文件?

我想用位于 的备份文件替换所有foo.php包含特定字符串的文件(例如)。我该怎么做?'bar'foo.php./backup/foo.php

我知道grep -lrI foo .所有文件都会被列出,但如何替换它们呢?

答案1

假设您只想删除这些文件,则以下 bash 行就可以了:

   for i in $(grep -lrI bar); do mv -i ./backup/`basename $i` $i; done

答案2

您可以尝试以下格式

句法

grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'

例子将会 :

grep -rl 'windows' ./ | xargs sed -i 's/windows/linux/g'

windows这将在相对于当前目录的所有文件中搜索字符串,并linux在每个文件中每次出现该字符串时用“windows”替换它。

评论中的附加说明:sed 参数中的正斜杠“/”分隔符也可以是其他分隔符(例如竖线“|”字符)。如果您不想转义正斜杠,则在搜索大量 html 文件时,竖线分隔符可能很有用。

除此之外,你还可以尝试凯文方法

cd /path/to/your/folder
sed -i 's/foo/bar/g' *

出现的“foo”将被替换为“bar”。

相关内容