惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Application and Cybersecurity Blog
Application and Cybersecurity Blog
The Register - Security
The Register - Security
V
Visual Studio Blog
aimingoo的专栏
aimingoo的专栏
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
量子位
C
Check Point Blog
博客园 - 【当耐特】
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Engineering at Meta
Engineering at Meta
Recorded Future
Recorded Future
The Last Watchdog
The Last Watchdog
博客园 - Franky
N
Netflix TechBlog - Medium
Webroot Blog
Webroot Blog
A
About on SuperTechFans
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
D
Docker
S
Security Affairs
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
V2EX - 技术
V2EX - 技术
Jina AI
Jina AI
Help Net Security
Help Net Security
L
LangChain Blog
P
Proofpoint News Feed
The Cloudflare Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
Schneier on Security
Schneier on Security
Recent Announcements
Recent Announcements
Attack and Defense Labs
Attack and Defense Labs
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
Microsoft Security Blog
Microsoft Security Blog
H
Heimdal Security Blog
P
Proofpoint News Feed
O
OpenAI News
H
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
爱范儿
爱范儿
Security Archives - TechRepublic
Security Archives - TechRepublic

博客园 - Jeff

4个月 C++ 有限状态机 POJ1019 POJ1035 POJ1007 POJ1005 ONLINE_JUDGE Linux shell定时器 URL2FILE C primer笔记 Vxworks增加system call C语言常用宏定义技巧 分苹果 Socket 为什么选择SMP而不是AMP RTP memory in Vxworks Windriver的项目类型 RTP affinity Symmetric multiprocessing (SMP)
怪异的grep结果
Jeff · 2011-12-20 · via 博客园 - Jeff

2011-12-20 16:00  Jeff  阅读(802)  评论()    收藏  举报

原意是发现文件中IP地址为1.1.1.1的行(不需显示1.1.1.191这样的).但是写错了,忘记"."是用于匹配任意字符的.但却发现有几条grep结果很奇怪. 根据GNU Grep的manual "<" Match the empty string at the beginning of word ">" 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+ 姑且认为两者是等价的吧.