如何在BASH正则表达式中使用字符列表和锚点

时间:2018-09-13 13:38:36

标签: regex bash

在其他正则表达式引擎中,我习惯于使用括在方括号中的字符列表,例如/ [0-3] /来匹配0或1或2或3,或/ [,^ ] word /以匹配字符串开头或紧跟在“,”之后的单词。我还没有找到有关BASH的文档,该文档定义了如何使用其正则表达式执行语法,并且我的测试未提供解决方案。在下面的示例中,我希望BASH打印出foo,bar和baz都在“ foo,bar,baz”中,而quz不在“ foo,bar,baz”中。但是如您所见,这不是我得到的输出。

testString=foo,bar,baz
for myVal in foo bar baz quz; do 
  echo "Testing if $myVal is in $testString"
  if [[ $testString =~ [,^]$myVal[,$] ]]; then 
    echo "++$myVal is in $testString"
  else 
    echo "--$myVal is not in $testString"
  fi
done

##### output #####
Testing if foo is in foo,bar,baz
--foo is not in foo,bar,baz
Testing if bar is in foo,bar,baz
++bar is in foo,bar,baz
Testing if baz is in foo,bar,baz
--baz is not in foo,bar,baz
Testing if quz is in foo,bar,baz
--quz is not in foo,bar,baz

0 个答案:

没有答案