簡體   English   中英

如何使用sed或awk從行中提取月份,日期和IP地址?

[英]How to extract the month, day of month and IP address from the line using sed or awk?

我已經提取了持續強制我的IMAP服務器的日/月和IP:

Nov1 unknown[186.216.99.239]:
Nov1 unknown[62.249.196.214]:
Nov1 unknown[110.145.123.120]:
Nov1 fixed-187-190-251-149.totalplay.net[187.190.251.149]:
Nov1 pd9568164.dip0.t-ipconnect.de[217.86.129.100]:
Nov1 unknown[103.227.88.130]:

我想輸出如下:

Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

我使用sed,awk和cut的組合用下面的代碼實現了這個結果,但是我想知道是否有更好的方法?

while read -r line
    do 
        monthday=$(echo $line | awk '{ print $1 }')
        # ip=$(echo $line | awk -F'[\\\[\\\]]' { print $2 } ) 
        ip=$(echo $line| cut -d[ -f2| cut -d] -f1 )
        echo "${monthday} ${ip}"
    done < badIpList.txt

使用awk:將字段分隔符設置為任意空格, [] ,然后打印第一個和第三個字段:

$ awk -F "[][ ]" '{ print $1, $3 }' infile
Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

請注意,字段分隔符是正則表達式,即括號表達式[][ ] gawk手冊

要在括號表達式中包含其中一個字符\\]-^ ,請在其前面放置\\

所以表達必須是

[\[\] ]

但由於存儲在字符串中的正則表達式(“ 動態/計算的正則表達式”)被掃描兩次 ,我們必須轉義反斜杠:

-F '[\\[\\] ]'

或者使用雙引號,就像我一樣,我必須逃避反斜杠和反斜杠逃避它:

-F "[\\\[\\\] ]"

這顯然不是太可讀。 謝天謝地,有一個漏洞:

此外,如果放置]在打開后立即[ ,閉合托架被視為要匹配的字符之一。

所以我們僥幸逃脫

-F "[][ ]"

甚至在雙引號內。 順便說一下,這里沒有真正的理由使用雙引號。

嘗試這個

sed -E 's/\s.*\[(.*)\]:/ \1/' file

不需要循環。

awk解決方案:

awk -F'[[:space:]\\[\\]]' '{print $1,$3}' file
  • -F'[[:space:]\\\\[\\\\]]' - 復雜的字段分隔符,可以是空格[:space:][] 因此,該行,例如。 Nov1 unknown[186.216.99.239]:將分為以下幾個領域:1) Nov1月1 Nov1 ,2) unknown ,3) 186.216.99.239和4) :

輸出:

Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

這個sed很簡單:

$ sed -r 's|^([^ ]*)[^[]*\[([^]]*)\].*|\1 \2|' badIpList.txt
Nov1 186.216.99.239
Nov1 62.249.196.214
Nov1 110.145.123.120
Nov1 187.190.251.149
Nov1 217.86.129.100
Nov1 103.227.88.130

邏輯:打印第一個單詞和方括號的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM