在命令行中查找和替换多个文件

时间:2009-12-13 07:13:07

标签: unix command-line command-line-arguments

如何在unix上的多个文件中的命令行中查找和替换字符串?

5 个答案:

答案 0 :(得分:44)

有很多方法。但其中一个答案是:

find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'

答案 1 :(得分:24)

与Zombie解决方案一样(我假设速度更快),但使用 sed (许多发行版和OSX上的标准版)代替Perl:

find . -name '*.py' | xargs sed -i .bak 's/foo/bar/g'

这将使用 bar 替换当前目录下的Python文件中的所有 foo 出现,并使用 .py.bak <为每个文件创建备份< / em> extension。

删除de .bak文件:

find . -name "*.bak" -delete

答案 2 :(得分:6)

我总是使用 ed脚本 ex脚本 来做到这一点。

for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof

ex 命令只是vi中的:line模式。

答案 3 :(得分:4)

将find和sed与带有空格的名称或目录一起使用时:

find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'

答案 4 :(得分:2)

使用最近的bash shell,并假设您不需要遍历目录

for file in *.txt
do
while read -r line
do
    echo ${line//find/replace} > temp        
done <"file"
mv temp "$file"
done