Linux

linux + 匹配 3 個八位字節或 4 個八位字節的 IP 地址

  • May 6, 2013

如何在一個命令中將 IP 地址與 4 個八位字節或 3 個八位字節匹配?

目標 - 匹配 xxx.xxx.xxx 或 xxx.xxx.xxx.xxx(語法應該適合 Linux 和 Solaris)

如何將以下命令合併到一個命令中?

echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
echo $IP_ADDRESS  | grep  '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 

我也試試這個(但它不起作用)

       echo $IP_ADDRESS | egrep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}|[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
if expr ".$IP_ADDRESS" : '\(\.[0-9]\{1,3\}\)\{3,4\}$' > /dev/null 
then echo match
else echo no match
fi

您不能grep在此處使用,因為grep用於匹配行,而不是字元串。您不能使用echo其中任何一個,因為它會對其參數進行替換。您不能將變數不加引號,否則會發生文件名生成和分詞。

如果您想在輸入文件中找到與該模式匹配的行,那麼這就是您要使用grep. 像:

grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}' < input.file

-x將報告由3 位或 4 位最多 3 位十進制數字組成的所有行(選項)。

如果您想在文本文件中提取所有 3 或 4 個最多 3 位數的十進制數 IP 地址,那麼最好的選擇可能是訴諸perl

perl -lne 'print for grep /^\d{1,3}(\.\d{1,3}){2,3}$/, /[\d.]+/g'

會輸出:

111.222.333
1.2.3.4

對於像這樣的輸入:

foo 1.1234.2.3 1.2 1.2.3.4.5 111.222.333 bar1.2.3.4@

雖然你也可以這樣做:

tr -cs 0-9. '[\n*]' < input.file |
 grep -Ex '[0-9]{1,3}(\.[0-9]{1.3}){2,3}'

引用自:https://unix.stackexchange.com/questions/74845