同时为匹配和不匹配的一个sed地址分配操作

同时为匹配和不匹配的一个sed地址分配操作,sed,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' 但这不起作用,至少在这种语法中是不行的。您可以使用/来表示以前使用过的正则表达式

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

但这不起作用,至少在这种语法中是不行的。

您可以使用
/
来表示以前使用过的正则表达式

$ 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
。有关详细信息,请参见。您可以使用
/
表示以前使用的正则表达式

$ 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
。有关详细信息,请参阅