[英]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.