我有一个包含 IP 地址的句子。例如,
This sentence contains an ip number 1.2.3.4 and port number 50, i want to print the IP address only.
从上面的句子来看,我只想打印 IP 地址。我怎样才能做到这一点?我听说可以用sed
我有一个包含 IP 地址的句子。例如,
This sentence contains an ip number 1.2.3.4 and port number 50, i want to print the IP address only.
从上面的句子来看,我只想打印 IP 地址。我怎样才能做到这一点?我听说可以用sed
这是可能的,但并不优雅:
[0-9]
匹配任何数字,\{1,3\}
意味着它可以重复 1 到 3 次。\.
匹配一个点。整个 IP 由\(...\)
括号捕获,之前和之后的内容由 匹配.*
,即任何重复零次或多次的内容。然后整个匹配字符串(即整行)被第一个匹配组的内容替换。您可以通过引入变量使其更具可读性:
如果找不到 IP,它会打印整个字符串。它也不检查无效的 IP,如 256.512.999.666。
这是一个
grep
解决方案:-o
只打印匹配的部分-E
切换到扩展正则表达式[0-9]
) 一次或多次 (+
) 然后一个点 (\.
) 和数字......这是另一个解决方案
perl
:-l
指定行终止符(换行符)-n
循环通过给定的输入echo
(可以是多行)-e
代码如下grep
perl 代码中的正则表达式与上面的解决方案非常相似使用以下命令
grep
:或者更好:
或者
我使用 grep:
与其他答案不同,这将仅打印有效的 IP 地址
我会在 python 3 解释器中这样做。它不仅抓取这种
111.111.111.111
格式的文本,而且检查是否有效。要获取 python 3 解释器,
python3
请在终端上键入命令。choroba 答案的扩展:
如果您不想打印新行而只想打印 IP:
输出:
解释:
AWK 结合 RegExp 非常适合处理部分行。
单行波纹管的基本思想是 for-loop 遍历一行,并检查是否存在四个数字和点,最多重复 4 次;同时我们可以检查端口号重复2到4次的数字
样品运行
你的句子包含 50 and,没有分开,因此打印在一起,但
gsub(/[[:punct:]]/,"")
如果需要可以删除。