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
您需要排除 IP 之前紧接 <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)
先匹配一个词边界(这里指的是不能有字母、数字或者紧靠当前位置右边的_
)并且必须有那里也没有 .
+ 数字序列。
看到一个 online grep
demo:
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
我正在尝试使用以下命令从文本文件中获取 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
您需要排除 IP 之前紧接 <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)
先匹配一个词边界(这里指的是不能有字母、数字或者紧靠当前位置右边的_
)并且必须有那里也没有 .
+ 数字序列。
看到一个 online grep
demo:
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