将变量传递给lookbehind组内的grep

时间:2012-10-19 16:36:34

标签: bash variables grep

我正在尝试使用bash脚本grep一些文本中的整数:

#!/bin/bash
var=string2    
cat file.txt | grep -oP '(?<=string1)(\d.*)(<=$var)'  

但脚本没有输出任何内容 如果我把“string2”而不是“$ var”我得到了预期的结果 我想我应该以某种方式逃避变量,但我无法弄清楚如何 我试过双引号,花括号,转义双引号,但没有任何作用 我还搜索了stackoverflow man grep和google 那么这样做的正确方法是什么? 感谢

2 个答案:

答案 0 :(得分:2)

变量仅在双引号内扩展,而不是单引号。所以它应该是:

cat file.txt | grep -oP "(?<=string1)(\d.*)(<=$var)"

答案 1 :(得分:1)

错误的引语:

$ echo '(?<=string1)(\d.*)(<=$var)'  
(?<=string1)(\d.*)(<=$var)

,同时:

$ echo "(?<=string1)(\d.*)(<=$var)"
(?<=string1)(\d.*)(<=string2)

echo显示grep将会看到的内容。