如何将正则表达式模式作为变量传递给grep?

时间:2016-03-16 23:23:13

标签: regex shell

例如,我有一个匹配xx-xx-xxx的正则表达式:[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{3},我想将它存储到变量中,以便我可以在程序中继续引用它。这是我试过的:

pattern="[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]"
grep -i "here:$pattern" file.log # assuming that my log file has "hi:xx-xx-xxx" pattern strings.

没有返回结果但是如果我执行:

grep -i "here:[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]" file.log

有效。我做错了什么?

1 个答案:

答案 0 :(得分:0)

你必须像\{2\}那样转义大括号,或者通过-E标志使用grep的扩展regexp模式。 因此,它将是

pattern='[a-z0-9]{2}-[a-z0-9]{2}-[a-z0-9]{3}'
echo "hi:aa-00-xxx" | grep -iE "hi:$pattern"

pattern='[a-z0-9]\{2\}-[a-z0-9]\{2\}-[a-z0-9]\{3\}'
echo "hi:aa-00-xxx" | grep -i "hi:$pattern"