首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unix grep命令

unix grep命令
EN

Stack Overflow用户
提问于 2011-02-04 01:06:20
回答 2查看 361关注 0票数 1

我有一个名为"file1“的文本文件,其中包含以下数据:

代码语言:javascript
复制
apple  
appLe  
app^e  
app\^e  

现在给出的命令是:

代码语言:javascript
复制
1.)grep app[\^lL]e file1  
2.)grep "app[\^lL]e" file1  
3.)grep "app[l\^L]e" file1  
4.)grep app[l\^L]e file1

output in 1st case : app^e

output in 2nd case :   
                     apple  
                     appLe  
                     app^e  

output in 3rd case :  
                     apple  
                     appLe  
                     app^e

output in 4th case :  
                     apple  
                     appLe  
                     app^e  

为什么..?

请帮帮我!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-04 01:13:55

代码语言:javascript
复制
 1.)grep app[\^lL]e file1

shell会在grep看到转义()之前将其删除,因此这相当于app[^lL]e。括号中的位匹配任何不是(从^开始,因为它是第一个字符)l或l的值

代码语言:javascript
复制
 2.)grep "app[\^lL]e" file1

这一次,\转义^,以便与^、L或l匹配

代码语言:javascript
复制
 3.)grep "app[l\^L]e" file1

只有当集合是第一个字符时,^才会对其求反,因此它与^、L或l匹配

代码语言:javascript
复制
  4.)grep app[l\^L]e file1

^是转义的,但由于它不是第一个,所以没有任何区别,所以它与^、L或l匹配

票数 5
EN

Stack Overflow用户

发布于 2011-02-04 01:14:11

在第一种情况下,grep app[\^lL]e file1不是在命令行上引用模式,而是由shell负责其扩展。因此,搜索模式实际上变成了

代码语言:javascript
复制
app[^lL]e

表示:"app",然后是除"L“或"l”之外的任何符号,然后是"e“。唯一符合的一行是

代码语言:javascript
复制
app^e

在其他情况下,^要么进行转义并逐字匹配,要么位于模式的中间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4889225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档