如何在命令行上匹配正则表达式并在退出代码中输出信号?

时间:2012-08-06 13:41:21

标签: regex command-line

我正在寻找一个简单的(最好是一行)命令行表达式,如果某个表达式与某个正则表达式匹配,则将其退出代码设置为0,如果不匹配,则将非零值设置为非零。理想情况下,这将是一个命令“匹配”,其工作原理如下:

$ match "foo.*" "foobar"; echo $?
0
$ match "foo.*" "f00bar"; echo $?
1

perl命令行程序(perl -e <…>)就可以了。如果命令输出匹配到stdout或stderr并不重要,我感兴趣的是二进制信息“匹配/不匹配”作为退出代码。

2 个答案:

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