我希望以递归方式搜索文本文件目录,并用foo
替换文件中的每个bar
。实现这一目标的最简单方法是什么?
我想grep会在一行中完成这项工作,但我似乎找不到这样的例子。
我在OS X工作。
答案 0 :(得分:13)
GNU find
find /path -type f -iname "*.txt" -exec sed -i.bak 's/foo/bar/g' "{}" +;
答案 1 :(得分:3)
grep
仅用于查找内容,而不是用于修改它们。
对于使用类似grep的界面进行修改,通常使用sed
。就其本身而言,sed
不支持任何类型的递归 - 它一次只能在一个文件上运行。要添加它,通常使用find
查找包含所需模式的文件,然后让它调用sed
来修改文件。
答案 2 :(得分:2)
的zsh
sed -i 's/foo/bar/g' **/*.txt
答案 3 :(得分:1)
尝试:
grep -rl "foo" .|xargs sed -i 's/foo/bar/g'
答案 4 :(得分:0)
有一个很好的自由文本编辑器可以简单轻松地完成这类工作:TextWrangler。