同时为一个sed地址分配动作以进行匹配和不匹配

时间:2017-07-10 10:25:14

标签: sed

我的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'

但这不起作用,至少没有那种语法。

1 个答案:

答案 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