Regex /bin/sh+“grep-o”+正则表达式=单行输出?

Regex /bin/sh+“grep-o”+正则表达式=单行输出?,regex,awk,grep,Regex,Awk,Grep,经过一些调查,我成功地找到了想要在/bin/sh-busybox上工作的正则表达式: 输入: REGEXP: 这给了我: Mar 8 09:58:29 IN=br0 OUT=vlan2 SRC=192.168.1.8 DST=3.26.211.8 PROTO=UDP SPT=22008 DPT=51413 问题是: 我似乎无法让grep在一行上告诉我结果 想要的结果是: Mar 8 09:58:29 IN=br0 OUT=vlan2 SRC=192.168.1.8 DST=3.26.211

经过一些调查,我成功地找到了想要在/bin/sh-busybox上工作的正则表达式:

输入:

REGEXP:

这给了我:

Mar  8 09:58:29
IN=br0
OUT=vlan2
SRC=192.168.1.8
DST=3.26.211.8
PROTO=UDP
SPT=22008
DPT=51413
问题是: 我似乎无法让grep在一行上告诉我结果

想要的结果是:

Mar  8 09:58:29 IN=br0 OUT=vlan2 SRC=192.168.1.8 DST=3.26.211.8 PROTO=UDP SPT=22008 DPT=51413
这是一个awk


只需更改if测试中的内容以选择您喜欢的字段。

您应该使用awk,而不是grep。这个awk解决方案非常有效!我唯一能想到的另一个问题(这不是原始问题的一部分)是:为了提高可读性,最好使用固定字段格式化输出,使SIP=1.2.3.4和SIP=111.222.111.222实际上比其他字段低一个。@user3018558可以完成,但需要在打印前将date inn存储到变量中。
Mar  8 09:58:29
IN=br0
OUT=vlan2
SRC=192.168.1.8
DST=3.26.211.8
PROTO=UDP
SPT=22008
DPT=51413
Mar  8 09:58:29 IN=br0 OUT=vlan2 SRC=192.168.1.8 DST=3.26.211.8 PROTO=UDP SPT=22008 DPT=51413
awk '{printf "%s %s %s ",$1,$2,$3;for (i=4;i<=NF;i++) if ($i~/(IN|OUT|SRC|DST|PROTO|SPT|DPT)=/) printf "%s ",$i;print ""}' file
Mar 8 09:58:29 IN=br0 OUT=vlan2 SRC=192.168.1.8 DST=3.26.211.8 PROTO=UDP SPT=22008 DPT=51413