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

本文共 2037 字,大约阅读时间需要 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+ 姑且认为两者是等价的吧.

转载于:https://www.cnblogs.com/JeffChen/archive/2011/12/20/2600240.html

你可能感兴趣的文章
通过ros节点发布Twist Messages控制机器人--10
查看>>
STL--list
查看>>
maven 学习之路之二(1)
查看>>
爬虫第二课:解析网页中的元素
查看>>
域名注册必须实名认证 《互联网域名管理办法》11月1日实施
查看>>
Convert a byte[] array to readable string format. This makes the "hex" readable!
查看>>
记录一下学习过程中,比较好的文章
查看>>
python之Django学习笔记(一)---搭建Django开发环境和一些基本命令
查看>>
【搜索入门专题练习1】hdu1241+hdu1312 C+D【DFS】
查看>>
ADO 输入输出文本及获取指定字符串
查看>>
.Net MVC 前台验证跟后台验证
查看>>
scrollerview中使用viewpager嵌套fragmentment 滚动事件冲突解决
查看>>
maven 和 Maven的配置
查看>>
Jenkins配置备份恢复插件ThinBackup
查看>>
Dockerfile 构建前端node应用cnpm命令启动nodejs服务
查看>>
OpenWRT中的按键和灯的GPIO控制实现_转
查看>>
进度管理中的常见问题
查看>>
POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
查看>>
linux运行级别
查看>>
工资调整
查看>>