shell使用grep匹配ip地址

首先,不推荐使用sed的原因如下:
  1. sed没有像grep一样有对Perl正则模式的支持(grep-P选项),因此无法使用\d\w等方便缩短正则表达式的语法;
  2. sed没有像grep一样可以只输出一行中被匹配部分(grep-o选项),因此需要使用小括号对匹配表达式进行分组,然后用\1\9来回调对应的组(按正则表达式中小括号的左括号出现的顺序,对应回调顺序:第一个"("包裹的正则表达式的匹配结果对应\1),同时还需要用表达式匹配掉不需要的部分,这就容易导致许多问题。

sed的软件包描述是:GNU流编辑器
grep的软件包描述是:字符串搜索实用程序

两者虽然功能上有重合的部分,但各自有各自擅长的领域。因此:
针对问题选择合适的解决方法,很重要。

最后,附上我的grep匹配ip地址的命令:**
grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}' demofile

以及我的sed匹配ip地址的命令:

sed -nr 's#[^0-9]*((1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[1-9])(\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])){3}).*#\1#p' demofile

需要注意的是:
上面这句sed命令有问题,我一直没有找到合适的解决办法,问题如下所示:

$ echo "1 127.0.0.1"  | sed -nr 's#[^0-9]*((1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[1-9])(\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])){3}).*#\1#p'
1127.0.0.1
$ echo "a1b 127.0.0.1"  | sed -nr 's#[^0-9]*((1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[1-9])(\.(1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])){3}).*#\1#p'
a1127.0.0.1
如果诸位有更好的写法,烦请批评指正!感激不尽!
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值