再会!
我有一个巨大的输入文件,显示大量垃圾,我想导出多个子字符串。问题是,有时附加信息会被注入到文件中,从而使我想要的数据在字符串中跳转。唯一的好处是IP地址永远是第一位的。有没有办法使用 grep、sed 或 awk 来完成此任务?
**Input file:**
Garbage ABC=10.100.100.100 Trash Unwanted DEF=1020 Crap
NotNeeded Disgard ABC=192.168.0.1 DEF=91 Garbage Trash
ABC=10.110.110.110 Garbage Trash NA Remove DEF=441
Garbage Crap Discard NotNeeded Trash
Unwanted Trash ABC=192.168.1.1 Unwanted DEF=12000 Nothing
**Desired output:**
ABC=10.100.100.100 DEF=1020
ABC=192.168.0.1 DEF=91
ABC=10.110.110.110 DEF=441
ABC=ABC=192.168.1.1 DEF=12000
预先感谢您提供的任何帮助。
答案1
使用 GNU,awk
您可以使用FPAT
正则表达式来定义要匹配的字段:
awk -v FPAT='[A-Z]+=[0-9.]+' '
{ for (i=1;i<=NF;i++) printf "%s", $i (i==NF ? ORS : OFS) }
' file
[A-Z]+
匹配 AZ 内的一个或多个字符=
匹配文字=
[0-9.]+
匹配一个或多个数字和点
这将循环匹配的字段并使用空格字符 ( OFS
) 作为分隔符打印每个字段。仅最后一个字段NF
由换行符 ( ) 分隔ORS
。
输出:
ABC=10.100.100.100 DEF=1020
ABC=192.168.0.1 DEF=91
ABC=10.110.110.110 DEF=441
ABC=192.168.1.1 DEF=12000