在 AWK 表达式中使用 bash 变量
我在 shell 脚本中尝试了以下代码片段,但 awk
没有找到 $REF
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
I tried the following snippet in a shell script but awk
didn't find $REF
REF=SEARCH_TEXT
echo "some text" | awk '/$REF/{print $2}'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不要在 shell 中引用游戏,而是使用
-v
选项将 shell 变量作为 awk 变量传递:如果
$REF
只是文本而不是正则表达式,请使用index()
函数而不是match()
。Instead of quoting games in the shell, use the
-v
option to pass the shell variable as an awk variable:If
$REF
is just text and not a regular expression, use theindex()
function instead ofmatch()
.你的问题措辞真的很糟糕......
无论如何,我认为你想要这个:
注意
$2
和双引号的转义。或者这个:
请注意明智地使用双引号和单引号,并且
$2
上没有转义。您必须使用 shell 扩展,否则它将包含导出 shell 变量并从中使用它使用 awk 的环境 - 在这种情况下这是过度杀伤:
我认为 awk 不支持 /.../ Guards 中的变量。 如果我错了,请纠正我。
You question is worded really poor...
Anyway, I think you want this:
Note the escaping of
$2
and the double quotes.or this:
Note the judicious use of double and single quotes and no escaping on
$2
.You have to use shell expansion, as otherwise it would encompass exporting a shell variable and using it from the environment with awk - which is overkill in this situation:
I think awk does not support variables in /.../ guards. Please correct me if I'm wrong.
在 gawk 中,您有 ENVIRON 数组,例如 awk 'END{print ENVIRON["REF"]}' /dev/null 将打印如果您已将变量从 shell 导出到子进程,则该变量是您的变量。
In
gawk
, you have theENVIRON
array, e.g.awk 'END{print ENVIRON["REF"]}' /dev/null
will print your variable if you'veexport
ed it out from the shell to sub-processes.