我有一个名为“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
为什么这样..?
请帮忙..!
答案 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
在其他情况下,^
要么按字面意义进行转义和匹配,要么就是在模式的中间。