在sed中,使用由分号分隔的多个命令是相当普遍的:
$ sed -e '/re/{s//replace/p; q;}
但是,标准(例如http://pubs.opengroup.org/onlinepubs/9699919799/)仅允许 换行符作为分隔符:
$ sed -e '/re/{ s//replace/p q }
是否仍有许多常见的sed实现仍在使用,不允许使用分号? IOW,一个打算便携的sed脚本可以使用分号吗?
答案 0 :(得分:5)
来自the POSIX specification of sed
:
除 {, a , b , c ,我以外的命令动词>, r , t , w ,:,#可以跟踪通过
<semicolon>
, 可选的<blank>
个字符和另一个命令动词。但是,当 s 命令动词与 w 标志一起使用时,以这种方式使用另一个命令跟随它会产生未定义的结果。
因此除了上面提到的那些命令之外,大多数命令都可以用分号分隔。
/[^\{abcirtw:#];[[:space:]]*/
: - )
答案 1 :(得分:3)
棘手的......我只能在sed-faq chapter 6.8.1
中找到关于此的参考资料大多数版本的sed允许在上面发出多个命令 命令行,以分号(;)分隔。
对于;
无效的唯一提法是HHSED
,请参阅Chapter 7
答案 2 :(得分:1)
GNU sed
似乎允许在MacOS X(BSD)sed
没有的几个地方使用分号。我现在没有触手可及的细节,但有几次我不得不修改答案,让它们在Mac上正常工作。问题可能是括号内的命令序列。