awk:从输入中打印匹配组

MLu*_*MLu 1 awk

我有一个日志文件,其中正在寻找字符串,--location http://example.com/whatever并且仅对URL感兴趣。它是多行输入,并且此位置字符串在其中一行中的某处,我不知道它在哪一行以及在哪一行。

使用以下awk脚本很容易打印它:

/--location ([^ ]+)/ {
   match($0, "--location ([^ ]+)", m);
   print m[1]
}
Run Code Online (Sandbox Code Playgroud)

但是,因为我已经在/--location .../模式中匹配了我想要的内容,所以以match()相同的模式运行另一个模式是错误的。

我想知道是否可以从中打印组匹配/--location ([^ ]+)/并在没有match()呼叫的情况下逃脱?

我使用的gawk 3.1,如果该事项

谢谢!

Joh*_*024 6

尝试:

awk 'match($0, "--location ([^ ]+)", m) {print m[1]}' file
Run Code Online (Sandbox Code Playgroud)

考虑以下测试文件:

$ cat file
a b --location FindMe1 cde
a b --location
--location FindMe2 a b
Run Code Online (Sandbox Code Playgroud)

我们的命令产生以下输出:

$ awk 'match($0, "--location ([^ ]+)", m) {print m[1]}' file
FindMe1
FindMe2
Run Code Online (Sandbox Code Playgroud)

怎么运行的

match($0, "--location ([^ ]+)", m)如果找到匹配项,则表达式返回true(1),如果找不到匹配项,则返回false(0)。因此,它是采取行动的条件print m[1]。因此,仅在找到匹配项后才进行打印。