我需要在一个目录中的所有文件和子目录中递归地搜索指定的字符串,并用另一个字符串替换此字符串。
我知道查找它的命令可能是这样的:
grep 'string_to_find' -r ./*
但是如何用另一个字符串替换string_to_find的每个实例呢?
我需要在一个目录中的所有文件和子目录中递归地搜索指定的字符串,并用另一个字符串替换此字符串。
我知道查找它的命令可能是这样的:
grep 'string_to_find' -r ./*
但是如何用另一个字符串替换string_to_find的每个实例呢?
当前回答
现代防锈工具可以用来做这项工作。 例如,在所有(非忽略)文件中替换“oldstring”和“oldstring”分别为“newstring”和“newstring”,你可以:
使用fd和sd
fd -tf -x sd 'old([Ss]tring)' 'new$1' {}
使用羽绒
ned -R -p 'old([Ss]tring)' -r 'new$1' .
使用ruplacer
ruplacer --go 'old([Ss]tring)' 'new$1' .
忽略了文件
要包含被忽略的(通过.gitignore)和隐藏的文件,你必须指定它:
fd使用-IH, 使用—忽略—隐藏用于ruplacer。
其他回答
你甚至可以这样做:
例子
grep -rl 'windows' ./ | xargs sed -i 's/windows/linux/g'
这将在相对于当前目录的所有文件中搜索字符串'windows',并在每个文件中每次出现该字符串时将'windows'替换为'linux'。
另一种选择是使用find,然后通过sed传递它。
find /path/to/files -type f -exec sed -i 's/oldstring/new string/g' {} \;
现代防锈工具可以用来做这项工作。 例如,在所有(非忽略)文件中替换“oldstring”和“oldstring”分别为“newstring”和“newstring”,你可以:
使用fd和sd
fd -tf -x sd 'old([Ss]tring)' 'new$1' {}
使用羽绒
ned -R -p 'old([Ss]tring)' -r 'new$1' .
使用ruplacer
ruplacer --go 'old([Ss]tring)' 'new$1' .
忽略了文件
要包含被忽略的(通过.gitignore)和隐藏的文件,你必须指定它:
fd使用-IH, 使用—忽略—隐藏用于ruplacer。
我得到了答案。
grep -rl matchstring somedir/ | xargs sed -i 's/string1/string2/g'
通常不使用grep,而是使用sed -i 's/string_to_find/another_string/g'或perl -i.bak -pe 's/string_to_find/another_string/g'。