команда unix grep - PullRequest
       3

команда unix grep

1 голос
/ 03 февраля 2011

У меня есть текстовый файл с именем «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 ]

5 голосов
/ 03 февраля 2011
 1.)grep app[\^lL]e file1

Экранирование (\) удаляется оболочкой до того, как grep его видит, поэтому это эквивалентно 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

0 голосов
/ 03 февраля 2011

В первом случае grep app[\^lL]e file1 вы не цитируете шаблон в командной строке, оболочка заботится о его расширении.Таким образом, шаблон поиска по сути становится

app[^lL]e

и означает: «приложение», затем любой символ, кроме «l» или «L», затем «e».Единственная подходящая строка - это

app^e

. В других случаях ^ либо экранируется и сопоставляется буквально, либо, кроме того, он находится в середине шаблона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...