LINUX.ORG.RU
решено ФорумAdmin

Неправильная работа команды grep (upd. всё работает правильно! :))) )

 ,


0

1

Создаю файлы:

[me@linuxbox ~]$ ls /bin > dirlist-bin.txt

[me@linuxbox ~]$ ls /usr/bin > dirlist-usr-bin.txt

[me@linuxbox ~]$ ls /sbin > dirlist-sbin.txt

[me@linuxbox ~]$ ls /usr/sbin > dirlist-usr-sbin.txt

Далее выполняю: $ grep -h ‘^zip*’ dirlist-*

zip

zipcloak

zipdetails

zipgrep

zipinfo

zipnote

zipsplit

zic

В полученном результате интересует последняя строчка, почему находиться «zic», при том что это сочетание не соответствует маске поиска???

Перемещено hobbit из general



Последнее исправление: artem-totality (всего исправлений: 2)

Ответ на: комментарий от akho

Почитал описание * в regexp, всё равно не понятно. Я вижу это выражение как: в начале строки идут три буквы zip, а затем что угодно или ничего, но zic туда вообще никак не попадает.

artem-totality
() автор топика
Ответ на: комментарий от artem-totality

Нет. Греп понимает таое выражение как «начало строки, z, i, сколько-то (возможно и ноль) букв p, дальше что угодно».

Регулярки - это не то же самое что маски.

Tanger ★★★★★
()
Ответ на: комментарий от artem-totality

Если вы считаете, что звёздочка — это «что угодно или ничего», то непонятно, зачем вы её вобще пишете. grep ведь по умолчанию проверяет не полное совпадения всей строки целиком с регулярным выражением, а просто вхождение регулярки в строку.

mky ★★★★★
()
Ответ на: комментарий от artem-totality

Я вижу это выражение как: в начале строки идут три буквы zip, а затем что угодно или ничего

Значит надо ещё раз прочитать документацию. Или хотя бы википедию.

Любой символ в regexp — .. То, что вы имели в виду в regexp пишется как ^zip.*, хотя в данном конкретном примере можно и без .* в конце обойтись — grep найдёт и так.

Не нужно путать regexp и wildcards — у них совершенно разный синтаксис.

CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Благодарю, понял!) В регулярном выражении * будет не сама по себе означать любой символ ноль или сколько угодно раз, а будет квонтификатором символа p. То бишь выражение читается как: в начале строки идут два символа zi, а затем символ p 0 или сколько угодно раз, ну а затем понятное дело что угодно). А то как я видел действительно записывается ^zip.* ! )))

Благодарю.

artem-totality
() автор топика