簡體   English   中英

如何從bash中與文件中的字符串匹配的行中提取IP地址?

[英]How do you extract IP addresses from a line matching a string from a file in bash?

例:

我有一個文件名example.txt,並在其中包含以下文本:

some text here INFO    200     cv 58687 http://saomesitehoere.com live connect ASDFG 61.215.80.6 07:16

some text here INFO    100     fv 582702687 http://saomesitehoere.org live connect 31.15.80.1 07:16:33

some text here INFO    00     ov 587 http://saomesitehoere.uk live connect ASGGGGFG 91.211.80.6 09:16

some text here INFO    800    kcv 277 http://saomesitehoere.za live connect AFG 71.215.81.5 09:14

我想從包含字符串名稱“ ASDFG”的行中提取IP地址,這意味着61.215.80.6

有人可以幫忙嗎?

$ grep -oP 'ASDFG \K\S*' < file
61.215.80.6

你可以嘗試awk:

awk '/\<ASDFG\>/{print $(NF-1)}' file

您可以使用 :

grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

IP地址是1到3位數字的3倍,后跟一個點,然后是1到3位數字。 因此,這將為您提供這樣一行的IP地址:

$ grep ASDFG logfile | grep -o '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\+'
61.215.80.6

要從文件中提取所有“有效” IP地址:

gawk  '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/,a);split(a[0],b,".")} b[1]<=255&& b[2]<=255 && b[3]<=255 && b[4]<=255 &&length(a[0]){print a[0]}' input_file

這將分兩個步驟進行:

  1. 首先,它將提取所有具有模式行digits.digits.digits.digits的子字符串
  2. 它將檢查每組數字是否小於或等於255。

注意:需要gawk才能使用match()函數。

暫無
暫無

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

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