我正在寻找一个简单的(最好是一行)命令行表达式,如果某个表达式与某个正则表达式匹配,则将其退出代码设置为0,如果不匹配,则将非零值设置为非零。理想情况下,这将是一个命令“匹配”,其工作原理如下:
$ match "foo.*" "foobar"; echo $?
0
$ match "foo.*" "f00bar"; echo $?
1
perl命令行程序(perl -e <…>
)就可以了。如果命令输出匹配到stdout或stderr并不重要,我感兴趣的是二进制信息“匹配/不匹配”作为退出代码。
答案 0 :(得分:1)
在bash中,在双括号内使用=~
。
$ [[ foobar =~ foo.* ]]; echo $?
0
$ [[ f00bar =~ foo.* ]]; echo $?
1
您甚至可以使用括号来提取匹配的组。
if [[ foobar =~ foo(.*) ]]; then
# Captured groups stored in "regex match" array.
echo "found ${BASH_REMATCH[1]}"
fi
答案 1 :(得分:0)
试试这个:
echo test | >/dev/null sed "/teds/ {q0}; q1 " ; echo $?
和此:
echo test | >/dev/null sed "/te/ {q0}; q1 " ; echo $?
第一个返回1,secons一个返回0。