打印包括 IP 地址在内的多个子字符串

打印包括 IP 地址在内的多个子字符串

再会!

我有一个巨大的输入文件,显示大量垃圾,我想导出多个子字符串。问题是,有时附加信息会被注入到文件中,从而使我想要的数据在字符串中跳转。唯一的好处是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

相关内容