如何在 unix 上的多个文件中的命令行上查找和替换字符串?
问问题
38748 次
5 回答
48
有很多方法。但答案之一是:
find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
于 2009-12-13T07:14:51.920 回答
34
就像 Zombie 解决方案(我假设更快)但使用sed(许多发行版和 OSX 的标准)而不是 Perl :
find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'
这将用 bar 替换当前目录下的 Python 文件中的所有foo出现,并为每个扩展名为.py.bak的文件创建备份。
并删除 de .bak 文件:
find . -name "*.bak" -delete
于 2011-05-04T12:38:57.880 回答
7
我总是用ed 脚本或ex 脚本来做到这一点。
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
ex命令只是 vi 中的 : 行模式。
于 2009-12-13T07:27:47.890 回答
6
Using find and sed with name or directories with space use this:
find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
于 2013-08-24T16:42:47.640 回答
2
使用最近的 bash shell,并假设您不需要遍历目录
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done
于 2009-12-13T08:33:11.763 回答