题
继庆典,黑客维基的建议 ,我要编辑的文件用编
在特定我想要做的与编代替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
把ed命令所有的重定向和“这里的文档”的一个shell脚本,调用,从查找。
但我要问:为什么ED?你觉得你可以编辑,你不能使用sed做呢?
不隶属于 StackOverflow