簡體   English   中英

bash +如何從行捕獲IP地址

[英]bash + how to capture IP address from line

我有許多配置文件,以LINE字開頭的行具有IP地址

我的目標是從文件中讀取以LINE單詞開頭的行,並僅打印IP地址

問題是IP地址可以在該行的任何字段中,因此我無法根據字段號捕獲IP

grep LINE file1.txt

LINE /home/Ariate/run.pl "Voda STS 4 Test -  " "102841" && ssh 17.77.170.130 -p 2022 



grep LINE file2.txt

LINE /home/Ariate/run.pl 137.77.170.30 "Voda STS 4 Test -  " "102841" && ssh  ACTIVE

請提出如何從線路中捕獲IP地址的建議(解決方案也可以使用perl一種襯墊)

預期成績

echo $IP_FROM_LINE

17.77.170.130



echo $IP_FROM_LINE

137.77.170.30
perl -MRegexp::Common=net -lne 'print $1 if /^LINE.*\b($RE{net}{IPv4})/'

使用此grep -oE

grep -oE '\d+\.\d+\.\d+\.\d+' file
17.77.170.130
137.77.170.30

要不然:

grep -oP '\d+\.\d+\.\d+\.\d+' file
grep -oE '[0-9]{2,3}(\.[0-9]{2,3}){3}'

火柴

17.77.170.130
137.77.170.30

要么

grep -oP '\d{2}(\.\d{2}){3}'

如果您的grep支持-P選項。

它們都可以使用您提供的數據。

但是,如果您真的擔心要匹配什么,請使用

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]?)'

可以匹配exat ip地址。

以下將為您提供所需的IP地址:

grep -oP '^LINE.*\b\K\d+\.\d+\.\d+\.\d+' file

要將結果作為請求放入變量中,您需要按以下步驟迭代結果:

grep -oP '^LINE.*\b\K\d+\.\d+\.\d+\.\d+' file |
while read IP_FROM_LINE ; do
    echo $IP_FROM_LINE
done

暫無
暫無

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

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