繁体   English   中英

在bash中以逗号分隔的列表匹配单词

[英]Matching a word in comma separated list in bash

我试图在用逗号分隔的单词列表的bash脚本中找到完全匹配的单词。

我尝试将grep与各种标志一起使用,例如grep -w,但它不起作用。

我有这个:

haystack="foo 1,bar"
needle="foo"
if [[ $( echo $haystack | grep $needle ) ]]; then
    echo exists
else
    echo does not exist
fi

在上面的示例中,“ foo 1”必须不匹配。 现在发生了什么,它找到了匹配项,但是我不想要那样。

在awk脚本中使用for循环遍历逗号分隔的字段,并检查它们是否为foo

haystack='foo 1,bar'
needle='foo'
echo "$haystack" | awk -F',' -v needle="$needle" '{for(i=1;i<=NF;++i){if($i==needle){print "exists";exit 0}}} END{print "doesn\047t exist";exit 1}'

这样,您就不必在针中转义正则表达式有效的字符了。

您可以使用带有(,|^)foo(,|$)模式的Bash正则表达式:

haystack="foo 1,bar"
needle='(,|^)foo(,|$)'
if [[ "$haystack" =~ $needle ]]; then
    echo 'exists'
else
    echo 'does not exist'
fi

观看在线演示

正则表达式匹配

  • (,|^) -要么,或字符串的开始
  • foo一些foo char序列
  • (,|$) - ,或字符串的结尾。

您可以使用换行符替换逗号,然后使用grep -x (完全匹配):

haystack="foo 1,bar"

needle="foo"
grep -qFx "$needle" <<< "${haystack//,/$'\n'}" && echo "exists" || echo "does not exist"
does not exist

needle="foo 1"
grep -qFx "$needle" <<< "${haystack//,/$'\n'}" && echo "exists" || echo "does not exist"
exists

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM