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

标签 linux bash grep

我试图在 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”不能匹配。现在会发生什么,它是否找到了匹配项,但我不希望那样。

最佳答案

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

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

参见 online demo

正则表达式匹配

  • (,|^) - , 或字符串开头
  • foo - 一些 foo 字符序列
  • (,|$) - , 或字符串结尾。

关于linux - 在 bash 中匹配逗号分隔列表中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56557032/

相关文章:

c - 将代码添加到函数中

段错误时未生成核心转储文件

python - 如何在node.js中实现这个python代码片段

Bash:从给定时间减去 10 分钟

bash - 如果文件存在,如何在脚本中继续?

awk - 在 AIX 中使用单个 awk 从字段中提取子字符串

regex - 你能用 grep 做所有能用egrep 做的事情吗?

linux - x86 汇编 linux 中如何解释系统调用

linux - 无法在 Gnome 中禁用 PrintScreen 键

bash - 从第一个用户输入定义的选项中接受第二个用户输入的最佳方式是什么?