大约 10 年前,我问过这个问题
并得到了这个有用的命令 find . -type f -print0 | xargs -0 sed -i 's/regex_search_term/replace_term/g'
我决定更多地了解find,xargs和sed语句。在 bash 版本 4.4.20(1)-release 的 Ubuntu 18.04 上,我可以将语句简化为:
find . -type f -print | xargs sed -i 's/regex_search_term/replace_term/g'
然后可以再次简化为:
find . -type f | xargs sed -i 's/regex_search_term/replace_term/g'
所以我的问题是,是否有任何缺点不使用-print0标志和 -0国旗find,并xargs分别?-print完全放弃标志有什么缺点吗?它们是否明确用于与不同的类 Unix 系统兼容?
不使用的版本-print0,并xargs -0会在文件名中的一些罕见的,但是合法的字符,包括空格,制表符,换行符,引号,和反斜杠会感到困惑。零字节(ASCII NUL 字符)是文件路径中唯一不能出现的东西,因此将其用作分隔符可以避免这些潜在问题。
但其实还有更简单的方法。现代版本find有一个-exec ... +主要的,做基本上是相同的东西xargs,直接在find命令:
find . -type f -exec sed -i 's/regex_search_term/replace_term/g' {} +
Run Code Online (Sandbox Code Playgroud)
它没有所有的选项xargs,所以如果你需要一些不同于通常的收集名称并运行它的东西,你仍然应该使用-print0 | xargs -0.
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |