bash正则表达式无法正常工作 - 与在线编辑一起工作

时间:2018-05-31 19:53:01

标签: regex bash sh

Regex适用于在线编辑器,但不适用于bash脚本。尝试了不同的方式

#!/bin/bash

echo -n "Your string> "
read String

regex='(?<!NOT.)TEST_34_TEST'

if [[ "$String" =~ ^(\?\<\!NOT\.)TEST_34_TEST ]]; then
    echo Match
else
    echo Non-Match
fi


if [[ "$String" =~ $regex ]]; then
    echo Match
else
    echo Non-Match
fi

我想要字符串匹配TEST_34_TEST并且没有前缀

TEST_34_TEST,TEST_34_TEST,TEST_34_TEST -> should match all 3
TEST_34_TEST, NOT_TEST_34_TEST, TEST_34_TEST -> should match 2 values
NOT_TEST_34_TEST, TEST_34_TEST, TEST_34_TEST -> should match 2 values

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您只想知道匹配的数量(并且不对它们做任何事情),您可以使用GNU grep

for s in "TEST_34_TEST,TEST_34_TEST,TEST_34_TEST" "TEST_34_TEST, NOT_TEST_34_TEST, TEST_34_TEST" "NOT_TEST_34_TEST, TEST_34_TEST, TEST_34_TEST"; do
    grep -noP '((?<!NOT.)TEST_34_TEST)' <<< "$s" | wc -l
done

将打印

3
2
2