庆典,黑客维基的建议 ,我要编辑的文件用编

在特定我想要做的与编代替sed的以下内容:

find . -type f -exec sed -i -e 's/a/b/g' {} \;

我看到ED并没有选择像sed的-e,从而据我所知,管道和IO重定向是与它的工作的唯一办法非交互方式。

因此,使用编从bash脚本做相同sed命令上面将如下所示:

ed file_name <<<$'g/a/s//b/g\nw'

或者

echo $'g/a/s//b/g\nw' | ed file_name

但据我所知,这是不可能找到的-exec。

内的管道或IO重定向涉及

我错过了什么?或者是克服这是使用循环的唯一途径?

for file in $(find . -type f -print); do ed $file <<<$'g/a/s//b/g\nw'; done;
有帮助吗?

解决方案

find . -type f -exec bash -c 'ed -s "$2" <<< "$1"' _ $'g/a/s//b/g\nw' {} \;

和一POSIX版本:

find . -type f -exec sh -c 'printf "%s\n" "g/a/s//b/g" w | ed -s "$1"' _ {} \;

主要理由使用编过的sed -i是ED编辑文件,同时sed的-i覆盖文件,如果你碰巧有你不想打破链接,这是一个问题。

其他提示

此查找和编辑片段设有测试模式(这样你就可以验证你有一个acutal质量之前,你的正则表达式正确的替换操作):

搜索和查找与替换&ED

http://codesnippets.joyent.com/posts/show/2299

把ed命令所有的重定向和“这里的文档”的一个shell脚本,调用,从查找。

但我要问:为什么ED?你觉得你可以编辑,你不能使用sed做呢?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top