Awk

列印包含 IP 地址的多個子字元串

  • July 13, 2020

再會!

我有一個巨大的輸入文件,其中顯示了很多垃圾,我想導出多個子字元串。問題是有時會在文件中註入額外的資訊,從而使我想要在字元串中跳轉的數據。唯一的好處是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

預先感謝您提供任何人都可以提供的幫助。

使用 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

引用自:https://unix.stackexchange.com/questions/598309