我的sed命令行脚本看起来像
echo "a,b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/ p; /^...$/! q1'
如果剩下3个字母,我希望脚本成功(返回代码0),否则失败。
稍微唠叨的部分是我必须复制地址/^...$/
。
我希望像
这样的东西echo "a,b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/ p ! q1'
但这不起作用,至少没有那种语法。
答案 0 :(得分:0)
您可以使用//
代表之前使用的正则表达式
$ echo "a,b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/ p; //! q1'
$ echo $?
1
$ echo "b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/ p; //! q1'
bcd
$ echo $?
0
或者,您可以使用b
命令开始下一个周期
$ echo "b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/{p;b}; q1'
bcd
$ echo $?
0
$ echo "a,b,c,d" | sed -ne 's/[^a-zA-Z0-9]//g; /^...$/{p;b}; q1'
$ echo $?
1
此语法可能仅适用于GNU sed
。有关详细信息,请参阅manual