2

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

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

perl 命令行程序 ( perl -e <…&gt;) 就可以了。命令是否将匹配输出到标准输出或标准错误并不重要,我感兴趣的只是二进制信息“匹配/不匹配”作为退出代码。

4

2 回答 2

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
于 2012-08-06T13:45:01.537 回答
0

试试这个 :

echo test | >/dev/null sed "/teds/ {q0}; q1 " ; echo $?

还有这个:

echo test | >/dev/null sed "/te/ {q0}; q1 " ; echo $? 

第一个返回 1,第二个返回 0。

于 2012-08-06T13:42:50.600 回答