我想用位于 的备份文件替换所有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”。