使用变量进行awk模式搜索

时间:2016-04-07 14:32:56

标签: bash variables awk pattern-matching

好的,所以我可以得到一个变量传递给awk但是当变量中有空格时它不会搜索任何东西,所以这里有一些代码

 new="bob"
 searc=`awk '/#'$new':/,/---/ {print $0}'` file.txt
 echo "$searc"

应该显示类似这样的内容

  #bob:
   happy
   fun
   love
   sun
  ------

所以第一个例子^工作得很好但是现在从未找到Luke Jackson这个名字存储在变量中的原因是因为它假设是动态的,所以它可以改变。现在我在这里错过了一些简单的东西,或者我不能这样做吗?

 new="Luke Jackson"
 searc=`awk '/#'$new':/,/---/ {print $0}'` file.txt
 echo "$searc"

  #Luke Jackson:
   sad
   fun
   evil
   moon
  ------

2 个答案:

答案 0 :(得分:2)

如果您稍微重写脚本,则不会出现任何问题

$ awk -v name='Luke Jackson' '$0~"#"name":"{f=1} f && /----/{f=0} f' file

  #Luke Jackson:
   sad
   fun
   evil
   moon

另请注意,也许您需要完全匹配,而不是模式匹配,在这种情况下使用==

答案 1 :(得分:0)

简单的sed也可以解决这个问题:

new='Luke Jackson'
sed -n "/#$new:/,/---/p" file

#Luke Jackson:
sad
fun
evil
moon
------