sed - -i 不带参数:是 GNU sed --posix 选项被窃听还是 BSD sed 不符合 POSIX?
问题描述
这主要是这里出现的一个好奇问题。
从 GNU sed 4.8 的手册页我读到
--posix
disable all GNU extensions.
所以我明白,如果像下面这样的代码有效,这意味着POSIX 允许-i
没有参数:
sed --posix -i -n '1,25p' *.txt
另一方面,相同的代码(带有或不带有--posix
)对于 MacOS 的 BSD sed 不起作用,因为该版本需要-i
后跟一个参数。
我只能看到两种相互排斥的可能性:
- GNU sed 的
--posix
选项允许的不仅仅是 POSIX,这意味着它存在错误并需要错误报告 - BSD sed 不符合 POSIX。
真相是什么?
解决方案
--posix
指的是sed语言本身,而不是命令行界面:
GNU sed 包括对 POSIX sed 的几个扩展。为了简化编写可移植脚本,此选项禁用本手册记录的所有扩展,包括附加命令。
POSIX 没有指定-i
,因此没有它的实现仍然可以符合 POSIX。
推荐阅读
- php - 如何根据下一行中的值更新单列
- regex - robots.txt 处理 URL 中的 #
- ios - reloadRowsAtIndexPath 防止 scrollToRowAtIndexPath
- java - 如何将其更改为仅数组?
- php - 找不到类“Twig_Test”
- jenkins - 当 Swagger-Diff 返回差异时让 Jenkins 失败
- tcp - SMS 与 TCP 的弱信号基于 GSM 的 M2M 通信?
- python - AttributeError:“NoneType”对象没有属性“a”
- python - 在 python 脚本执行后增加睡眠时间,同时它正在运行
- assembly - 将此嵌入式汇编代码转换为与 gcc 一起使用