带有搜索字符串变量的awk命令

带有搜索字符串变量的awk命令,awk,Awk,Configuration.xml在第23行的位置有“mysearchstring” 如果我使用下面的语句,它将返回第23行 awk '/"mysearchstring"/{print NR}' Configuration.xml 但如果我使用指定的变量,它不会返回任何结果 str="mySearchString";awk '/$str/{print NR}' Configuration.xml 有人能告诉我第二个语句中有什么不正确吗?您需要使用-v将变量传递给awk,然后使用~比较: a

Configuration.xml
在第23行的位置有“
mysearchstring

如果我使用下面的语句,它将返回第23行

awk '/"mysearchstring"/{print NR}' Configuration.xml 
但如果我使用指定的变量,它不会返回任何结果

str="mySearchString";awk '/$str/{print NR}' Configuration.xml

有人能告诉我第二个语句中有什么不正确吗?

您需要使用
-v
将变量传递给awk,然后使用
~
比较:

awk -v myvar="$str" '$0 ~ myvar {print NR}' Configuration.xml
例子
$cat a
你好
怎样
是
你

$awk'/e/{print NR}'a您可以使用命令行选项
-v
将变量传递给
awk

awk -v searchstr="$str" '$0 ~ searchstr { print NR }'

或者,您可以在代码之后按如下方式传递变量:

awk '$0~s {print NR}' s="$str" file

我正在使用bash shell来执行此操作,因此给出的关于的选项将不起作用…因此命令行的选项将不起作用。如果有3行代码,我只希望得到第一行代码。请使用适当的解释更新您的问题,而不是在注释中进行注释。
awk '$0~s {print NR}' s="$str" file