awk:从输入中打印匹配组

时间:2016-09-14 01:58:30

标签: awk

我有一个日志文件,我正在寻找一个字符串--location http://example.com/whatever,我只对URL感兴趣。这是多行输入,这个位置字符串位于其中一行上,我不知道哪一行和它在哪一行。

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

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

然而,由于我已经在/--location .../模式中匹配了我想要的内容,因此使用相同的模式运行其他match()会感觉不对。

我想知道是否可以打印/--location ([^ ]+)/的群组匹配并在没有match()电话的情况下离开?

如果重要的话,我正在使用 gawk 3.1

谢谢!

1 个答案:

答案 0 :(得分:4)

尝试:

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

实施例

考虑这个测试文件:

$ cat file
a b --location FindMe1 cde
a b --location
--location FindMe2 a b

我们的命令产生这个输出:

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

如何运作

如果找到匹配,则表达式match($0, "--location ([^ ]+)", m)返回true(1),如果未找到匹配则返回false(0)。因此,它可以作为行动print m[1]的条件。因此,只有在找到匹配项时才会发生打印。