该怎么做而不是 awk 中的正则表达式 exp

What to do instead of the regex exp in awk

现在我正在使用 awk 来搜索我放入正则表达式中的字符串,但是我正在尝试使用 "defined variable" 来使我的代码更易于重用。我要替换的代码是:

awk '
    /lksdfjsalfjl/ { counter++}
    END{}
' file

在网上搜索时,我发现 /.../ 中有一个变量不能使用。您对替代方案有什么建议吗?

使用~进行正则表达式匹配:

awk -v x='lksdfjsalfjl'  '[=10=]~x {counter++} END{print counter+0}' file

更详细:

  • -v x='lksdfjsalfjl'

    这里定义了一个变量x

  • [=15=]~x {counter++}

    如果当前行 [=16=]x.

  • 中的正则表达式匹配,则计数器递增

如果您愿意,您可以使用 shell 变量来设置 awk 变量:

a='lksdfjsalfjl'
awk -v x="$a"  '[=11=]~x {counter++} END{print counter+0}' file