Jac*_*ack 117 linux macos shell
在linux shell中,以下命令将递归搜索并将'this'的所有实例替换为'that'(我在我面前没有Linux shell,但它应该这样做).
find . -name "*.txt" -print | xargs sed -i 's/this/that/g'
Run Code Online (Sandbox Code Playgroud)
OSX上的类似命令会是什么样的?
Tay*_*nUB 232
OS X使用混合的BSD和GNU工具,所以最好总是查看文档(虽然我有它less
甚至不符合OS X手册页):
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html
sed将参数-i
作为备份的扩展名.提供空字符串(-i ''
)以进行无备份.
以下应该做:
LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +
这-type f
只是一种很好的做法; 如果你给它一个目录左右,sed会抱怨.
-exec
优先于xargs
; 你不必费心-print0
或任何事情.将{} +
在年底意味着find
将所有结果作为参数添加的,而不是给被叫命令的一个实例,再运行它为每个结果.(一个例外是当操作系统允许的最大命令行参数数量被破坏时;在这种情况下find
将运行多个实例.)
Wil*_*ill 130
对于mac,更类似的方法是这样的:
find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"
Run Code Online (Sandbox Code Playgroud)
Men*_*tor 14
如果您使用的是 zsh 终端,您可以使用通配符魔法:
sed -i "" "s/search/high-replace/g" *.txt
mad*_*adx 12
在Mac OSX 10.11.5上,这很好用:
grep -rli 'old-word' * | xargs -I@ sed -i '' 's/old-word/new-word/g' @
Run Code Online (Sandbox Code Playgroud)
Mac*_*ban 11
作为替代解决方案,我在Mac OSX 10.7.5上使用这个
grep -ilr 'old-word' * | xargs -I@ sed -i '' 's/old-word/new-word/g' @
Run Code Online (Sandbox Code Playgroud)
eb8*_*b80 10
以上都不适用于OSX.
请执行下列操作:
perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt
Run Code Online (Sandbox Code Playgroud)
小智 6
适用于Linux和Mac OS X的版本(通过添加-e
开关sed
):
export LC_CTYPE=C LANG=C
find . -name '*.txt' -print0 | xargs -0 sed -i -e 's/this/that/g'
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我的可行的。在 Mac OS X 10.10.4 上
grep -e 'this' -rl . | xargs sed -i '' 's/this/that/g'
Run Code Online (Sandbox Code Playgroud)
上面的使用find会更改不包含搜索文本的文件(在文件末尾添加新行),这是冗长的。
2021年
什么对我有用:
LC_ALL=C && LANG=C && find . -type f | xargs sed -i '' 's/old/new/g'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
100334 次 |
最近记录: |