博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怪异的grep结果
阅读量:5953 次
发布时间:2019-06-19

本文共 1968 字,大约阅读时间需要 6 分钟。

原意是发现文件中IP地址为1.1.1.1的行(不需显示1.1.1.191这样的).但是写错了,忘记"."是用于匹配任意字符的.但却发现有几条grep结果很奇怪. 根据GNU Grep的 "" Match the empty string at the end of word 所以当时我就写成了grep "<1.1.1.1>" 结果如下: ksim@MxGms3:~> echo "1.1.1.1 games1"|grep "<1.1.1.1>" 1.1.1.1 games1 ksim@MxGms3:~> echo "1.1.1.191 games1"|grep "<1.1.1.1>" 1.1.1.191 games1 第二句执行结果,出乎我的意料.经人提醒,这里"."匹配了任意字符. 于是我改成 grep "<1.1.1.1>" 执行结果如下: ksim@MxGms3:~> echo "1.1.1.191 games1"|grep "<1.1.1.1>" ksim@MxGms3:~> echo "1.1.1.1 games1"|grep "<1.1.1.1>" 1.1.1.1 games1 后来,改成-w也可以: grep -w "1.1.1.1" 执行结果如下: ksim@MxGms3:~> echo "1.1.1.191 games1"|grep -w "1.1.1.1" ksim@MxGms3:~> echo "1.1.1.1 games1"|grep -w "1.1.1.1" 1.1.1.1 games1 但是我依然不明白最早使用命令的输出结果,就是这一句: ksim@MxGms3:~> echo "1.1.1.191 games1"|grep "<1.1.1.1>" 1.1.1.191 games1 为什么会把1.1.1.191显示出来., "."是用于代表一个任意字符的,但只是代表一个任意字符,不能代表多个,这个怎么能匹配出来1.1.1.191. 同样的,我改成-w option,也是不理解: ksim@MxGms3:~> echo "1.1.1.191 games1"|grep -w "1.1.1.1" 1.1.1.191 games1 但这又应该和"." 操作符有关的,因为我又试了以下命令: ksim@MxGms3:~> echo "121212121 games1"|grep "<1212121>" ksim@MxGms3:~> echo "1212121 games1"|grep "<1212121>" 1212121 games1 把"."换成2,就不会把121212121显示出来. 所以所有的问题归结到一个问题, 那就是"<1.1.1.1>" 和 -w "1.1.1.1" 这2个难道不是精确匹配" 4个1以及4个1中间夹带3个任意字符" ?? 问题出在哪里? 查看GNU manul,可以看到下面一段: -w, --word-regexp Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word con-stituent character. Similarly, it must be either at the end of the line or followed by a non-word constituent character. Word-constituent characters are letters, digits, and the underscore. 也就是说-w只关心constituent characters, 像其他符号不影响匹配结果.比如: ksim@MxGms3:~> echo "+abc++" |grep -w "abc" +abc++ ksim@MxGms3:~> echo "+abc+abc+" |grep -w "abc" +abc+abc+ ksim@MxGms3:~> echo "+ac+abc+" |grep -w "abc" +ac+abc+ ksim@MxGms3:~> echo "+abc+ac+" |grep -w "abc" +abc+ac+ 而且发现""的效果和-w一样: ksim@MxGms3:~> echo "+abc+ac+" |grep "" +abc+ac+ 姑且认为两者是等价的吧.

转载地址:http://mraxx.baihongyu.com/

你可能感兴趣的文章
CGI、PHP-CGI、FastCGI
查看>>
PhoneGap极光推送 cordova消息推送
查看>>
Subarray Sum Equals K
查看>>
preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
查看>>
王下邀月熊_Chevalier的前端每周清单系列文章索引
查看>>
js设计模式之观察者模式和发布/订阅模式
查看>>
Mac上以太坊Geth环境安装
查看>>
基于Netty模拟解析Binlog
查看>>
零配置构建工具:parcel
查看>>
算法题解:找出包含给定字符的最小窗口(枚举的一般方法)
查看>>
lodash源码分析之baseFindIndex中的运算符优先级
查看>>
MySQL数据库规范及解读
查看>>
用 Go 构建一个区块链 -- Part 5: 地址
查看>>
vscode+sftp 开发模式环境的同步
查看>>
Web Storage 与cookies
查看>>
Android Gallery2技术分析
查看>>
微信群 保存到通讯录
查看>>
路由器和iP地址的那些事
查看>>
Glide 这样用,更省内存!!!
查看>>
php无法连接mysql(selinux)
查看>>