如何使用awk打印所有匹配的字符串?

如何使用awk打印所有匹配的字符串?

我的输入是这样的:

["https://www.tesing.com/watch/80239279"],
["https://www.testing.com/watch/80240715?source=35"],
["https://www.testing.com/watch/80242619?trackId=254015180&tctx=0%2C0%2Ce336905e-6b5c-4a93-ad18-57ae35b6eb08-583558810%2C29fea9da-2bf8-43b0-b26a-2da637154825_96118138X20XX1560732016031%2C29fea9da-2bf8-43b0-b26a-2da637154825_ROOT"],
["https://www.testing.com/watch/80242619?tctx=1%252C0%252C%252C%252C"],

所以我只想要提取物参数(例如:trackId、SourceId)

我的正则表达式/[\?\\&]{1,2}\w+=/

文件.awk

BEGIN {}
{
    match($0, /[\?\\&]{1,2}\w+=/){print substr($0, RSTART, RLENGTH)}
}
END {}

但它只打印一个匹配的字符串。

答案1

即使问题只是相关的,请注意,使用 pure (尤其是 grep) 或awk来实现相同的目标要容易得多:grepsed

grep -o '\?[^=]*='

或者

sed -n 's/.*\(\?[^=]*=\).*/\1/p'

答案2

使用以下命令进行测试,效果很好

awk -F "=" '{print $1}' filename |awk -F "?" '{print "?"$2}'| sed '/^\?$/d'

输出

?source=
?trackId=
?tctx=

相关内容