提问人:William Pursell 提问时间:6/8/2011 更新时间:12/25/2013 访问量:3006
在 sed 中使用分号作为命令分隔符的可移植性如何?
How portable is it to use semi-colons as command separators in sed?
问:
在 sed 中,使用多个用分号分隔的命令是相当常见的:
$ sed -e '/re/{s//replace/p; q;}
但是,标准(例如 http://pubs.opengroup.org/onlinepubs/9699919799/ )只允许 换行符作为分隔符:
$ sed -e '/re/{ s//replace/p q }
是否有许多仍在使用的 sed 常见实现不允许使用分号?IOW,打算用于移植的 sed 脚本可以使用分号吗?
答:
3赞
Fredrik Pihl
6/9/2011
#1
棘手的...我能找到的唯一参考资料是在 sed-faq 第 6.8.1 章中
大多数版本的 sed 都允许在 命令行,用分号 (;) 分隔。
对不工作的唯一参考是 ,参见第 7 章;
HHSED
评论
1赞
Jürgen A. Erhard
3/2/2013
奇怪的是,命令分隔符没有记录在 sed(至少是 GNU)的文档中(不,我认为是额外的材料,您不需要它来获取完整信息)。
1赞
Jonathan Leffler
6/9/2011
#2
GNU似乎允许在MacOS X(BSD)不允许的一些地方使用分号。我现在没有触手可及的细节,但有几次我不得不修改答案才能让它们在 Mac 上正常工作。问题可能出在大括号封闭的命令序列上。sed
sed
评论
1赞
stevesliva
8/15/2017
在最低限度上,BSD sed 似乎坚持在关闭大括号之前使用最后一个分号,而 GNU sed 则不然。 GNU: BSD:{n;p}
{n;p;}
9赞
Abbafei
12/25/2013
#3
从 sed
的 POSIX 规范来看:
除 {、a、b、c、i、r、t、w、: 和 # 之外的命令谓词后跟 a , 可选字符和另一个命令谓词。但是,当 s 命令谓词与 w 标志一起使用时,以这种方式在它后面使用另一个命令会产生未定义的结果。
<semicolon>
<blank>
因此,除了上面提到的命令之外,大多数命令都可以用分号分隔。
/[^\{abcirtw:#];[[:space:]]*/
:-)
评论