高级 sed 打印 + 替换

高级 sed 打印 + 替换

我感兴趣的是,下面发布的解决方案是否有更优雅的解决方案。

[]$ 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命令实际上替换了文件中的模式。

我遇到的问题:

  1. sed -n -i(不能有多个命令行修饰符/参数)-?有人确认吗?

  2. 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' {} +

打印替换之前将更改的行。

相关内容