Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本-backtick/grep regex字符串中的变量扩展_Regex_Bash_Scripting_Grep - Fatal编程技术网

Bash脚本-backtick/grep regex字符串中的变量扩展

Bash脚本-backtick/grep regex字符串中的变量扩展,regex,bash,scripting,grep,Regex,Bash,Scripting,Grep,我正试图在backticks中,在regex搜索字符串中展开bash脚本中的一个变量 我希望替换$VAR 我匹配的行如下所示: start…一些字符….id:…一些字符….[我正在搜索的变量]…一些字符….end var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt` 这有可能吗 它似乎不起作用。我知道我通常可以用“$VAR”展开变量,但这不就是直接在正则表达式中搜索那些字符吗?我不确定这里的优先级是什么。为了插值变量,需要将表达式用双引号括起来(然后

我正试图在backticks中,在regex搜索字符串中展开bash脚本中的一个变量

我希望替换
$VAR

我匹配的行如下所示:

start
…一些字符….
id:
…一些字符….
[我正在搜索的变量]
…一些字符….
end

var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt`
这有可能吗


它似乎不起作用。我知道我通常可以用
“$VAR”
展开变量,但这不就是直接在正则表达式中搜索那些字符吗?我不确定这里的优先级是什么。

为了插值变量,需要将表达式用双引号括起来(然后,转义需要转义的任何内容)

var=$(grep -E "^.*id:.*$VAR.*\$" ./input_file.txt)

(这里不需要反斜杠,但我把它放进去是为了给你一个想法。你的实际表达式可能更复杂。)

变量确实以反斜杠展开,但它们不以单引号展开

因此,您需要对正则表达式字符串使用双引号(我不确定您关心的是什么),或者同时使用两个引号

所以

var=`grep -E "^.*id:.*$VAR.*$" ./input_file.txt`


另外,您可能希望使用
$(grep…
,而不是反勾号,因为它们是更现代的方法,具有更好的语法属性,并且能够嵌套。

避免使用旧的和不推荐的反勾号,请使用以下括号:
var=$(grep……txt)
谢谢,我听说
$()
更好,虽然我也听说backtick更可能是向后兼容的。这也是真的吗?这个千年中任何合理的东西都应该支持现代语法。我认为即使是HP-UX和AIX。当然,任何有壳的地方都可以。
var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`