Путаница в Linux команда grep - PullRequest
1 голос
/ 07 января 2012

У меня очень простое замешательство по поводу grep. Предположим, у меня есть следующий файл для grep:

test.txt:
This is an article 
from some newspaper
Article is good 
newspaper is not.

Теперь, если я grep со следующим выражением

grep -P "is\s*g" test.txt

Я получаю строку:

Article is good

Однако, если я сделаю это:

grep -P "is*g" test.txt

Я ничего не понимаю. Мой вопрос заключается в том, что asterix (*) является подстановочным знаком, который представляет 0 или более повторений предыдущего символа, если вывод grep не должен быть одинаковым. Почему ноль или более повторений 's' не дают никакого вывода?

Что мне здесь не хватает. Спасибо за помощь!

Ответы [ 4 ]

8 голосов
/ 07 января 2012

Поскольку в ваших входах нет ничего, что соответствует i, то 0 или более повторений s, затем g.«Article is good» не может соответствовать, потому что после s есть пробел, а не g.Шаблон is\s*g соответствует, потому что \s является специальным шаблоном, который соответствует любому пробелу - таким образом, общий шаблон равен is, затем любое количество пробелов, затем g, что естественно соответствует "is g".

3 голосов
/ 07 января 2012

Я не вижу ig, isg, issg, issssg на вашем входе ...

Поскольку я не знаю, с чем вы хотели соответствовать, вот мое лучшее предположение:

grep -P "is.*g" test.txt
1 голос
/ 07 января 2012

Прежде чем использовать grep, вы должны увидеть регулярное выражение, также вы найдете его полезным для других команд ... http://www.regular -expressions.info /

0 голосов
/ 07 января 2012

Это 0 или более повторений предыдущего регулярного выражения атом , и этот атом равен \s.Так что \s* может соответствовать tab-space-tab-space-space.

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