簡體   English   中英

來自文件的 Bash IP

[英]Bash IP from file

我正在嘗試使用以下命令從文本文件中獲取 IPv4 地址:

grep -E -o '((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]))' file.txt

這將顯示有效的 IP 地址,但也會顯示我不想要的更長的無效 IP 中的有效部分。

輸入示例:

IP address one is 192.168.1.1, ip 2 is 192.168.1.2.
192.168.1.3  192.168.1.10.1
Output I get:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.10
Output I want:
192.168.1.1
192.168.1.2
192.168.1.3

您需要排除<digit>.所有匹配項<digit>. 緊接在 IP 之前和.<digit>之后。

這就是為什么您需要帶有以下正則表達式的 GNU grep原因:

grep -Po '\b(?<!\d\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b(?!\.\d)' file

開頭的\\b(?<!\\d\\.)首先匹配單詞邊界(這意味着在當前位置的左側不能有字母、數字或_ )並且不能有數字和. 序列,要么。

末尾的\\b(?!\\.\\d)首先匹配一個單詞邊界(這里,它意味着當前位置右側不能有字母、數字或_ )並且不能有. + 數字序列,要么。

查看在線grep演示

s="IP address one is 192.168.1.1, ip 2 is 192.168.1.2.
192.168.1.3  192.168.1.10.1"
grep -Po '\b(?<!\d\.)(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b(?!\.\d)' <<< "$s"

輸出:

192.168.1.1
192.168.1.2
192.168.1.3

請參閱PCRE 正則表達式演示

暫無
暫無

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

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