在Mac和Linux上以递归方式搜索和替换文本文件
在linux shell中,以下命令将递归搜索并将“ this”的所有实例替换为“ that”(我前面没有Linux shell,但应该这样做)。
find . -name "*.txt" -print | xargs sed -i 's/this/that/g'
OSX上的类似命令会是什么样?
回答:
OS X混合使用BSD和GNU工具,因此最好始终检查文档(尽管我less
什至不符合OS X手册页):
https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html
sed将参数after -i
作为备份的扩展名。提供空字符串(-i ''
)表示不进行备份。
应该执行以下操作:
LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +
这-type f
只是个好习惯;如果给sed一个目录,sed会抱怨。 -exec
优先于xargs
;
您无需理会-print0
或任何事情。将{}
+在年底意味着find
将所有结果作为参数添加的,而不是给被叫命令的一个实例,再运行它为每个结果。(一个例外是当操作系统允许的最大命令行参数数被破坏时;在这种情况下,find
它将运行多个实例。)
以上是 在Mac和Linux上以递归方式搜索和替换文本文件 的全部内容, 来源链接: utcz.com/qa/411911.html