Awk
列印包含 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
預先感謝您提供任何人都可以提供的幫助。
使用 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