如果其中一行具有不匹配模式,如何使用sed命令读取以返回错误?

时间:2018-10-08 16:35:34

标签: sed

我尝试使用sed注释查找每行的不匹配情况。如果有任何行与模式不匹配,则如果所有行都成功,则返回1。它寻找-的模式。我有sed命令,如下所示:

sed -n -E '/([a-zA-Z ]+-[0-9]+)/ p'

成功案例:

u-3 abaklsd
a-2 jkds

失败案例:

u-3 abaklsd
a-2 jkds
khs jkd

1 个答案:

答案 0 :(得分:1)

sed没有为此提供便利。您可以轻松地将脚本重构为Perl。

perl -ne 'if (/[a-zA-Z ]+-\d+/) { print } else { $rc=1; }
    exit $rc if (eof)'

还是Awk:

awk '{ if (/[a-zA-Z +-[0-9]+/) print; else rc=1 }
    END { exit rc }'

括号是多余的,所以我把它们拿了出来。不过,也许您想在正则表达式上领先^和尾随$锚。