我有一个日志文件,我正在寻找一个字符串--location http://example.com/whatever
,我只对URL感兴趣。这是多行输入,这个位置字符串位于其中一行上,我不知道哪一行和它在哪一行。
使用此awk
脚本打印它很容易:
/--location ([^ ]+)/ {
match($0, "--location ([^ ]+)", m);
print m[1]
}
然而,由于我已经在/--location .../
模式中匹配了我想要的内容,因此使用相同的模式运行其他match()
会感觉不对。
我想知道是否可以打印/--location ([^ ]+)/
的群组匹配并在没有match()
电话的情况下离开?
如果重要的话,我正在使用 gawk 3.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]
的条件。因此,只有在找到匹配项时才会发生打印。