ABC*_*ABC 10 sed regular-expression macos
我使用的是 macOS,我想使用以下sed
命令查找给定单词并将其替换为另一个单词,但它没有进行任何更改。问题是什么?
sed 's/\<cat\>/dog/g' tt.txt
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 15
sed
在 macOS 上使用[[:<:]]
代替\<
和[[:>:]]
代替\>
. 另外, macOS 实现sed
不支持\b
单词边界模式。即使sed(1)
macOS 上的手册提到了re_format(7)
、和,也是\<
如此。\>
\b
文件本身不会改变
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt
Run Code Online (Sandbox Code Playgroud)
唯一发生的事情是sed
读取文件并将表达式应用到每个输入行。然后它将转换后的数据写入标准输出。
要将输出保存到新文件,请使用
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new
Run Code Online (Sandbox Code Playgroud)
然后,您可以用新数据替换原始文件:
sed 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt >tt.txt-new && mv tt.txt-new tt.txt
Run Code Online (Sandbox Code Playgroud)
在 macOS 上,您还应该能够使用以下命令就地执行转换
sed -i '' 's/[[:<:]]cat[[:>:]]/dog/g' tt.txt
Run Code Online (Sandbox Code Playgroud)
尽管手册上说:
不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下可能会出现损坏或部分内容的风险。
Ant*_*hon -1
只要您的文本具有准确的顺序,\<cat\>
就应该将其替换。但我认为它只有<cat>
这样的尝试:
sed 's/<cat>/dog/g' tt.txt
Run Code Online (Sandbox Code Playgroud)
单引号防止解释它们之间的任何字符。
归档时间: |
|
查看次数: |
4701 次 |
最近记录: |