如何在不更改所有权的情况下进行搜索和替换

Ian*_*Ian 4 unix replace sed

我找到了这个命令行搜索和替换示例:

find . -type f -print0 | xargs -0 sed -i 's/find/replace/g'
Run Code Online (Sandbox Code Playgroud)

它工作正常,只是它更改了它搜索的每个文件的日期和文件所有权,即使是那些不包含搜索文本的文件。

这项任务的更好解决方案是什么?

Isa*_*aac 5

使用该-c选项(如果您使用的是 Linux)应该会导致 sed 保留所有权。当您使用该命令时,它实际上正在重写每个文件,即使它没有对不包含find.

  • 对于谷歌用户:似乎 `-c` 确实不在 GNU sed 中,它是 RedHat 添加的补丁(最近添加在这里:https://bugzilla.redhat.com/show_bug.cgi?id=566455,更改日志在这里: http://rpmfind.net/linux/RPM/centos/7.2.1511/x86_64/Packages/sed-4.2.2-5.el7.x86_64.html)。其他发行版也可能已将其引入,但我在 Arch 中没有,也没有在 GNU 的联机帮助页中:https://www.gnu.org/software/sed/manual/sed.txt (4认同)