2011-02-03 4 views
1

У меня есть текстовый файл с именем "file1", содержащий следующие данные:Unix команды Grep

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

В чем ваш вопрос? – gnur

+0

Что вы ожидаете от вывода? –

+0

Почему результат отличается, когда мы даем шаблон в двойных кавычках («app [\^lL] e»), и когда шаблон не указан в двойных кавычках.? – Akshay

ответ

5
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

спасибо за очень хороший и ясный ответ .. просто небольшое сомнение .. в первом случае вы сказали, что «побег удаляется оболочкой». что это точно значит ... не могли бы вы рассказать немного больше. благодаря! – Akshay

+0

Обновлено, чтобы сделать его более ясным (я надеюсь) –

+0

\ является экранирующим символом для (стандартных) оболочек. Некоторые символы имеют особую семантику, например '' ', используемый в спецификации диапазона (на первом месте), является дополнительным оператором. Поэтому, если вам нужен символ '^', а не оператор, вы должны его избежать: '\ ^'. Если вы хотите избежать экранирующего символа: \\. Это более ясно? –

0

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

app[^lL]e 

и означает: «приложение», затем любой символ, кроме «L» или «L», а затем «е». Только линия, которая подходит является

app^e 

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

Смежные вопросы