Replace 列出i';我用sed代替

Replace 列出i';我用sed代替,replace,sed,Replace,Sed,我有命令 find . -type f \( ! -name "*.png" \) -print0 | \ xargs -0 sed -i 's#word#replace#g' 到目前为止,该命令仍然有效,但我想显示sed替换文本的文件。 是否有一些参数允许?您缺少cmp来比较更改前后的两个文件。您可以尝试以下几点: find . -type f \( ! -name "*.png" \) -exec sh -c 'sed "s/word/replace/g" $0 > $0.$$;

我有命令

find . -type f \( ! -name "*.png" \) -print0 | \
xargs -0 sed -i 's#word#replace#g'

到目前为止,该命令仍然有效,但我想显示
sed
替换文本的文件。
是否有一些参数允许?

您缺少cmp来比较更改前后的两个文件。您可以尝试以下几点:

find . -type f \( ! -name "*.png" \) -exec sh -c 'sed "s/word/replace/g" $0 > $0.$$; if ! cmp $0.$$ $0; then echo $0; mv $0.$$ $0; else rm $0.$$; fi' {} \;
  • 查找-在当前目录中,所有文件名不象*.png
  • 在find命令找到的文件中执行搜索并用relace单词替换单词,然后将其放入进程id附加的临时文件中
  • 如果!cmp语句-比较新文件和旧文件,如果它们不相同,则打印文件名和输出,最后将临时文件移到原始文件(如果它们不相同),否则删除临时文件
      我不知道您在哪个平台上,但这是可能的。将您的
      xargs
      更改为运行shell,这样您就可以执行多个命令,然后在该shell中,测试该文件是否比您在开始时创建的某个任意文件更新,即它是否已更改

      touch /tmp/go
      find ... | xargs ... -I % sh -c 'sed "%"; [ "%" -nt /tmp/go ] && echo %'
      

      您可以同时使用“打印”和“执行”选项,并打印出它处理的文件:

      find-键入f\(!-name“*.png”\)-print-exec sed-i's#word#replace#g'{};2> /dev/null