我有一个日志文件,其中正在寻找字符串,--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,如果该事项
谢谢!
尝试:
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]。因此,仅在找到匹配项后才进行打印。