如何在 bash 脚本中使用正则表达式?
Posted
技术标签:
【中文标题】如何在 bash 脚本中使用正则表达式?【英文标题】:How do I use regular expressions in bash scripts? 【发布时间】:2010-09-23 05:20:14 【问题描述】:我想使用正则表达式检查变量是否具有有效年份。阅读bash manual 我知道我可以使用运算符 =~
查看下面的示例,我希望看到“不正常”,但我看到“正常”。我做错了什么?
i="test"
if [ $i=~"200[78]" ]
then
echo "OK"
else
echo "not OK"
fi
【问题讨论】:
bash regex with quotes?的可能重复 请注意,这是因为=~
周围缺少空格而失败。
【参考方案1】:
它在 3.1 和 3.2 之间发生了变化:
这是对自 bash-3.1 发布以来添加到 bash-3.2 的新功能的简要描述。
将字符串参数引用到 [[ 命令的 =~ 运算符现在强制字符串匹配,与其他模式匹配运算符一样。
所以使用它不带引号:
i="test"
if [[ $i =~ 200[78] ]] ; then
echo "OK"
else
echo "not OK"
fi
【讨论】:
如果我不能引用正则表达式包含空格的情况,我该如何处理?如果正则表达式是例如a +b
会报语法错误...
@Alderath:使用a\ \+b
转义空格和加号。【参考方案2】:
运算符周围需要空格=~
我=“测试” 如果 [[ $i =~ "200[78]" ]]; 然后 回声“确定” 别的 回声“不好” 菲【讨论】:
paxdiablo 的回答是对的,在这里添加空格并没有帮助(您现在也得到 2008 年的“不正常”,唯一匹配的字符串字面上是“200[78]”)。以上是关于如何在 bash 脚本中使用正则表达式?的主要内容,如果未能解决你的问题,请参考以下文章
bash:在 shell 脚本中使用正则表达式查找和 grep
使用 linux 和 AIX 的正则表达式替换 bash 脚本中的字符串