unix grep命令

时间:2011-02-03 17:06:20

标签: unix grep

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

apple  
appLe  
app^e  
app\^e  

现在给出的命令是:

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  

为什么这样..?
请帮忙..!

2 个答案:

答案 0 :(得分:5)

 1.)grep app[\^lL]e file1

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

 2.)grep "app[\^lL]e" file1

这一次,\转义^所以它匹配^或L或l

 3.)grep "app[l\^L]e" file1
只有当它是第一个字符时,

^才能使集合无效,所以这匹配^或L或l

  4.)grep app[l\^L]e file1

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

答案 1 :(得分:0)

在第一种情况grep app[\^lL]e file1中,您没有在命令行上引用模式,shell负责其扩展。因此,搜索模式实际上变为

app[^lL]e

并且表示:“app”,然后是“l”或“L”的任何符号,然后是“e”。唯一适合的是

app^e

在其他情况下,^要么按字面意义进行转义和匹配,要么就是在模式的中间。