Bash 脚本 - backtick/grep 正则表达式字符串中的变量扩展
Bash script - variable expansion within backtick/grep regex string
我正在尝试在我的 bash 脚本中的正则表达式搜索字符串中的反引号内扩展一个变量。
我想要替换 $VAR
。
我匹配的行是这样的:
start
..一些字符.....id:
.....一些字符.....[variable im searching for]
..一些字符。 ...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`
或
var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`
此外,您可能想使用 $(grep ...)
而不是反引号,因为它们是更现代的方法,具有更好的语法属性并且能够嵌套。
我正在尝试在我的 bash 脚本中的正则表达式搜索字符串中的反引号内扩展一个变量。
我想要替换 $VAR
。
我匹配的行是这样的:
start
..一些字符.....id:
.....一些字符.....[variable im searching for]
..一些字符。 ...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`
或
var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`
此外,您可能想使用 $(grep ...)
而不是反引号,因为它们是更现代的方法,具有更好的语法属性并且能够嵌套。