簡體   English   中英

sed - 如何使用 sed 提取 IP 地址?

[英]sed - How to extract IP address using sed?

這是作業,所以我別無選擇,只能使用 sed。

給定一個文件messages ,我如何提取所有 IP 地址並打印出來?

我第一次嘗試

sed -n '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' messages

但它什么也沒打印。 經過一些研究,我發現 sed 不支持非貪婪運算符 like? 和|。

我一直在絞盡腦汁,但如果沒有非貪婪的運營商,我想不出一種方法來做到這一點。 我怎樣才能做到這一點?

會更適合那里(如果你有sed ,你也應該有grep ):

grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages

這是您自己的regex ,未經修改(測試正常)

如果你有GNU sed ,你可以簡單地添加-r標志來使用 ERE:

sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file

否則,您將需要轉義某些字符:

sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file

這些字符包括:

  • 使用括號組: ()
  • 出現大括號: { , }
  • “或”管道: |
  • 非貪婪問號: ?

通常(盡管不適合您的情況)我使用以下內容來匹配 IP 地址:

sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file

或者在兼容模式下:

sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file

使用sed -r (擴展正則表達式)或使用\\轉義捕獲組

你也能做到:

視窗:

ipconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '2 d' | head -n1;

操作系統:

ifconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '1 d' | head -n1;

如果您在Windows上使用git-bash 這很方便。

 export LC_ALL=C; ipconfig | sed -n 's/IPv4//gp;' | sed -En 's/.*(10.*)/\1/gp' 
以太網適配器 VMware Network Adapter VMnet1:

   連接特定的 DNS 后綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : fe80::3177:bf7b:590:c787%6
   IPv4 地址 . . . . . . . . . . . . : 192.168.31.1
   子網掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網關. . . . . . . . . . . . . :

以太網適配器 VMware Network Adapter VMnet8:

   連接特定的 DNS 后綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : fe80::c8de:747e:34fe:58cd%12
   IPv4 地址 . . . . . . . . . . . . : 192.168.239.1
   子網掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網關. . . . . . . . . . . . . :

以太網適配器 以太網:

   連接特定的 DNS 后綴 . . . . . . . : some.com
   本地鏈接 IPv6 地址. . . . . . . . : fe80::9d9:bb4d:e77a:3a98%15
   IPv4 地址 . . . . . . . . . . . . : 10.11.68.42
   子網掩碼  . . . . . . . . . . . . : 255.255.254.0
   默認網關. . . . . . . . . . . . . : 10.11.168.1

該腳本只會為您提供10前綴的ip地址10.11.68.42

該腳本可以解釋為

匹配行包含IPv4並用空白替換IPv4並打印,然后捕獲以10為前綴的內容並打印

賽格文:

ping -n 1 www.ip.com | sed  -n '2,/[0-9]/ s/.*\( [0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/p' | tr -d ' '

暫無
暫無

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

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