簡體   English   中英

Bash grep ip從行

[英]Bash grep ip from line

我的文件ip.txt包含以下內容

ata001dcfe16f85.mm.ph.ph.cox.net (24.252.231.220)
220.231.252.24.xxx.com (24.252.231.220)

我做了這個bash命令來提取ips:

grep -Eo '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' ip.txt | sort -u > good.txt

我想編輯代碼,以便僅提取括號之間的ips。 並非該行上的所有ip 220.231.252.24因為當前代碼提取了ip 220.231.252.24

為了使IP處於括號內,您所需要做的就是將整個正則表達式包裝在轉義的\\( \\)

grep -Eo '\((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\)'

將輸出為

(24.252.231.220)
(24.252.231.220)

如果您想在輸出中也擺脫偏癱,環顧四周將非常有用

grep -oP '(?<=\()(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?=\))'

將產生輸出為

24.252.231.220
24.252.231.220

一個更輕便的版本是

grep -oP '(?<=\()(25[0-5]|2[0-4][0-9]|[01]?[0-9]{2}?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]{2}?)){3}(?=\))'

這里

[0-9]{2}匹配數字2次

(\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]{2}?)){3}匹配. 隨后是三位數的三倍

可以使用管道將重復行刪除為uniq

grep -oP '(?<=\()(25[0-5]|2[0-4][0-9]|[01]?[0-9]{2}?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9]{2}?)){3}(?=\))' input | uniq

給輸出為

24.252.231.220

你可以嘗試awk

awk  -F"[()]" '{print $(NF-1)}' file
24.252.231.220
24.252.231.220

暫無
暫無

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

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