2016-04-14 2 views
1

Как я понял это регулярное выражениеПочему символ новой строки в моем регулярном выражении соответствует всей строке?

^1.*\n 

должна соответствовать линии, начиная с 1 с последующим любым количеством символов и новой строки полукокса, затем останавливается. Что это на самом деле делает при использовании Perl регулярного выражения соответствует линии, начиная с 1 с последующим любым количеством символов и новой строкой полукоксом и затем все следующей строкой:

-bash-3.2$ cat testfile 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 

-bash-3.2$ grep -P '^1.*' testfile 
1 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
-bash-3.2$ grep -P '^1.*\n' testfile 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 

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

Благодаря

+0

Вы пытались передать опции -oP? 'grep -oP '^ 1. * \ n' testfile'. [* '--only-matching' - Распечатайте только согласованные (непустые) части соответствующих строк, каждая из которых будет выделена на отдельной выходной строке. *] (http://www.gnu.org/software/ grep/manual/grep.html) –

ответ

1

По умолчанию grep выходы соответствуют линии. Чтобы переопределить это поведение, перейдите к опции -o.

grep -oP '^1.*\n' testfile`. 

Смотрите grep documentation: только

-o
    --only-matching
        печати совпавшие (непустой) части соответствующих линий, с каждой такой части на отдельный выпуск линия.

+0

<смущенное лицо> Я знал это! Какое число. Благодаря :) – mazz0

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