Linux
linux + 匹配 3 個八位字節或 4 個八位字節的 IP 地址
如何在一個命令中將 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}'