我在Mac OS上使用sed命令,以下为文本。
$ cat pets.txt
This is my cat
my cat's name is betty
This is your dog
your dog's name is frank
This is your fish
your fish's name is george
This is my goat
my goat's name is adam
Run Code Online (Sandbox Code Playgroud)
当我运行时:(BSD sed)
$ sed '3,6 {/This/d}' pets.txt
Run Code Online (Sandbox Code Playgroud)
它显示错误:
sed: 1: "3,6 {/This/d}": extra characters at the end of d command
Run Code Online (Sandbox Code Playgroud)
它出什么问题了?当我使用时gsed(GNU sed),效果很好。
use*_*833 24
对于因类似错误消息而发现此问题但由于尝试在Mac OS X上进行就地编辑而导致的任何人
根据https://github.com/lmquang/til/issues/18:
OS X 要求明确指定扩展名。解决方法是设置一个空字符串:
$ sed -i '' 's/megatron/pony/g' /path/to/file.txt
^^
Run Code Online (Sandbox Code Playgroud)
man sed:
-i extension就地编辑文件,使用指定的扩展名保存备份。如果给出零长度扩展,则不会保存任何备份。不建议在就地编辑文件时提供零长度扩展名,因为在磁盘空间耗尽等情况下,您可能会面临损坏或部分内容的风险。
因此,在 Mac OS Xextension上省略时似乎存在问题,因此您必须提供-i一个空字符串 ( '')。
另见https://unix.stackexchange.com/a/112024/23614:
如果使用 FreeBSD 或 OS/X,请替换
-i为-i ''.
最简单的解决方案是在d(后面的空格是可选的)后加一个分号:
sed -e '3,6 { /This/d; }' pets.txt
Run Code Online (Sandbox Code Playgroud)
sed与GNU相比,BSD 对布局的要求更高sed。有许多不属于BSD的GNU扩展,sed这就是其中之一。分号不是解决问题的通用方法,尽管它确实解决了许多问题。您还可以将命令分布在多行上,或将它们放在多个-e选项中,或其他各种“技巧”中。
| 归档时间: |
|
| 查看次数: |
5511 次 |
| 最近记录: |