【问题标题】:How to pass a parameter to a regex inside an awk command如何将参数传递给 awk 命令中的正则表达式
【发布时间】:2015-02-17 17:55:24
【问题描述】:

我在将参数传递给 awk 命令中的正则表达式时遇到问题。这里的问题似乎是什么?正则表达式是否读取参数名称而不是值?谢谢

FILE=*some file here*
TEST_STRING1=test


awk -v testString1="$TEST_STRING1" 'BEGIN {

}
{
##Sample REGEX HERE
if ( $0 ~ "^testString1.* - \[.*\] - .*$") {
##DO SOMETHING HERE
            }
}
END{}
' $FILE

【问题讨论】:

  • 就像任何其他语言一样,字符串中的单词只是一个单词,即使它恰好与某个变量或函数的名称或程序中使用的任何其他符号相同。 "...testString1.." 只是一个包含文本testString1 的字符串,它与同名变量没有关系。

标签: regex bash unix awk ksh


【解决方案1】:

你需要使用awk字符串连接:

if ( $0 ~ "^" testString1 ".* - \[.*\] - .*$" ) {

或者,在 shell 中进行变量替换——引用有点棘手

awk -v regex="^${TEST_STRING1}"'.* - \[.*\] - .*$'

然后,在 awk 中

if ($0 ~ regex) ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 2017-11-02
    • 2014-01-10
    • 2012-07-14
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多