【发布时间】:2010-12-26 03:11:25
【问题描述】:
如何在 unix 上的多个文件的命令行中查找和替换字符串?
【问题讨论】:
标签: unix command-line command-line-arguments
如何在 unix 上的多个文件的命令行中查找和替换字符串?
【问题讨论】:
标签: unix command-line command-line-arguments
类似于 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
【讨论】:
sed -i.bak(没有空格)
将 find 和 sed 与名称或带有空格的目录一起使用:
find . -name '*.py' -print0 | xargs -0 sed -i 's/foo/bar/g'
【讨论】:
使用最近的 bash shell,并假设您不需要遍历目录
for file in *.txt
do
while read -r line
do
echo ${line//find/replace} > temp
done <"file"
mv temp "$file"
done
【讨论】:
我总是使用 ed 脚本 或 ex 脚本。
for i in "$@"; do ex - "$i" << 'eof'; done
%s/old/new/
x
eof
ex 命令只是 vi 中的 : 行模式。
【讨论】:
有很多方法。但答案之一是:
find . -name '*.html' |xargs perl -pi -e 's/find/replace/g'
【讨论】: