我感兴趣的是,下面发布的解决方案是否有更优雅的解决方案。
[]$ find ./abc -type f -exec sed -n 's/test/best/pg' {} + ; find ./abc -type f -exec sed -i 's/test/best/g' {} +
第一个find sed
命令将所有找到的模式打印到控制台。第二个find sed
命令实际上替换了文件中的模式。
我遇到的问题:
sed -n -i
(不能有多个命令行修饰符/参数)-?有人确认吗?sed
没有本地修饰符来在替换之前打印结果 -?找不到解决方案,也许它存在,并且可以修改命令(即下面将不输出任何内容,并在背后替换!)。find ./abc -type f -exec sed -i 's/test/best/pg' {} +
答案1
好吧,你不需要有两个单独的find
命令:
find abc -type f -exec sed -n 's/test/best/pg' {} + -exec sed -i 's/test/best/g' {} +
...并且您不需要./
前面的abc
.
答案2
如果你使用 GNU/任何你可以使用的东西
find abc -type f -exec sed -i 's/test/best/gw /dev/fd/2' {} +
但在您的文本中您提到想要在替换之前打印结果,不确定“结果”是什么意思,但是
find abc -type f -exec sed -i '/test/w /dev/fd/2
s//best/g' {} +
打印替换之前将更改的行。