[英]sed - How to extract IP address using sed?
这是作业,所以我别无选择,只能使用 sed。
给定一个文件messages ,我如何提取所有 IP 地址并打印出来?
我第一次尝试
sed -n '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' messages
但它什么也没打印。 经过一些研究,我发现 sed 不支持非贪婪运算符 like? 和|。
我一直在绞尽脑汁,但如果没有非贪婪的运营商,我想不出一种方法来做到这一点。 我怎样才能做到这一点?
grep会更适合那里(如果你有sed
,你也应该有grep
):
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' messages
这是您自己的regex
,未经修改(测试正常)
如果你有GNU sed
,你可以简单地添加-r
标志来使用 ERE:
sed -rn '/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file
否则,您将需要转义某些字符:
sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' file
这些字符包括:
(
, )
{
, }
|
?
通常(尽管不适合您的情况)我使用以下内容来匹配 IP 地址:
sed -rn '/([0-9]{1,3}\.){3}[0-9]{1,3}/p' file
或者在兼容模式下:
sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p' file
使用sed -r
(扩展正则表达式)或使用\\
转义捕获组
你也能做到:
视窗:
ipconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '2 d' | head -n1;
操作系统:
ifconfig | perl -nle'/(\d+\.\d+\.\d+\.\d+)/ && print $1' | sed '1 d' | head -n1;
如果您在Windows
上使用git-bash
。 这很方便。
export LC_ALL=C; ipconfig | sed -n 's/IPv4//gp;' | sed -En 's/.*(10.*)/\1/gp'
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::3177:bf7b:590:c787%6
IPv4 地址 . . . . . . . . . . . . : 192.168.31.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : fe80::c8de:747e:34fe:58cd%12
IPv4 地址 . . . . . . . . . . . . : 192.168.239.1
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . : some.com
本地链接 IPv6 地址. . . . . . . . : fe80::9d9:bb4d:e77a:3a98%15
IPv4 地址 . . . . . . . . . . . . : 10.11.68.42
子网掩码 . . . . . . . . . . . . : 255.255.254.0
默认网关. . . . . . . . . . . . . : 10.11.168.1
该脚本只会为您提供10
前缀的ip
地址10.11.68.42
。
该脚本可以解释为
匹配行包含
IPv4
并用空白替换IPv4
并打印,然后捕获以10
为前缀的内容并打印
赛格文:
ping -n 1 www.ip.com | sed -n '2,/[0-9]/ s/.*\( [0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/p' | tr -d ' '
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.