[英]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.