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

时间:2015-06-25 21:59:26

标签: linux shell unix awk scripting

现在我正在使用awk来搜索我放入正则表达式的字符串,但是我正在尝试使用"定义的变量"而是让我的代码更可重用。我要替换的代码是:

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

在线研究时我发现变量不能在/.../中使用。对替代方案有什么建议吗?

1 个答案:

答案 0 :(得分:3)

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

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

更详细:

  • -v x='lksdfjsalfjl'

    这定义了一个变量x

  • $0~x {counter++}

    如果当前行$0x中的正则表达式匹配,则会增加计数器。

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

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