我试图在正则表达式搜索字符串内部的反引号内扩展我的bash脚本中的变量。
我想要替换$VAR
。
我匹配的行如下:
start
....一些角色..... id:
.....一些角色..... [variable im searching for]
....一些角色...... 。end
var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt`
这可能吗?
它似乎不起作用。我知道我通常可以使用"$VAR"
扩展变量,但是这不是直接搜索正则表达式中的那些字符吗?我不确定这里优先考虑的是什么。
答案 0 :(得分:5)
变量确实在反引号中扩展,但它们不会用单引号扩展。
因此,您需要为正则表达式字符串使用双引号(我不确定您对此有何关注)或使用两个引号。
所以要么
var=`grep -E "^.*id:.*$VAR.*$" ./input_file.txt`
或
var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`
此外,您可能希望使用$(grep ...)
而不是反引号,因为它们是更现代的方法,并且具有更好的语法属性以及能够嵌套。
答案 1 :(得分:3)
你需要用双引号表达表达式(然后,转义需要转义的任何东西),以便插入变量。
var=$(grep -E "^.*id:.*$VAR.*\$" ./input_file.txt)
(反斜杠在这里并不是绝对必要的,但我把它放进去给你一个想法。你的真实表达可能更复杂。)