Почему эта команда grep ничего не возвращает? (Bash) - PullRequest
2 голосов
/ 01 октября 2009

У меня есть текстовый файл 'samp', который я хочу отображать ТОЛЬКО в строках, начинающихся и заканчивающихся гласными в верхнем регистре.

Использование "grep ^[AEIOU] samp" работает.
Использование "grep [AEIOU]$ samp" также работает.

Но при попытке объединить их в "grep ^[AEIOU]$ samp" ничего не возвращается.

3 вещи:

  • Да, у меня есть строки, которые начинаются и заканчиваются гласными в верхнем регистре в сэмпле.
  • Да, я пробовал каждую комбинацию цитат, которую только мог придумать. Ничего еще
  • Да, я новичок в Unix.

Ответы [ 6 ]

8 голосов
/ 01 октября 2009

То, что вы даете, это grep для строк, которые в точности равны 1 заглавной гласной.

Попробуйте это:

 <cmd> | grep '[AEIOU]$' | grep '^[AEIOU]'

Я уверен, что это можно сделать с помощью одного grep, но я не очень хорошо знаю grep unix. Если регулярное выражение похоже на perl, оно будет равно

 <cmd> | grep '^[AEIOU](.*[AEIOU])?$'
1 голос
/ 01 октября 2009

Ваш "комбинированный" пример ищет строки, которые состоят из ОДНОЙ заглавной буквы в строке! То, что вы хотели:

grep '^[AIOUE].*[AIOUE]$' samp
1 голос
/ 01 октября 2009

Ваш шаблон допускает ровно один гласный в строке. Попробуйте:

grep ^[AEIOU].*[AEIOU]$ 

Обратите внимание, что теперь это не будет совпадать со строками с одним гласным, если вам это тоже нужно, тогда нам нужно немного поумнее и использовать некоторые "или" s.

0 голосов
/ 01 октября 2009

Используя egrep, вы можете сделать что-то вроде:

echo $'hello\nworld' | egrep '^h|d$' 
0 голосов
/ 01 октября 2009

Это будет соответствовать строке, которая состоит только из любого количества заглавных гласных (это включает ноль, поэтому это соответствует пустым строкам):

grep '^[AEIOU]*$'

Это соответствует строкам, состоящим только из одной или нескольких заглавных гласных (не соответствует пустым строкам):

grep -E '^[AEIOU]+$'

Любой из них будет соответствовать строке, состоящей только из одной заглавной гласной.

0 голосов
/ 01 октября 2009

Обсуждая grep , 1-е издание Джеффри Фридла «Освоение регулярных выражений» имеет «Поверхностный обзор вкуса нескольких распространенных программ» в Таблице 6-1 на странице 182.

Он говорит, что «даже что-то столь же простое, как grep широко варьируется»

Регулярные выражения в grep НЕ совпадают с Perl.

Даже egrep с расширенными регулярными выражениями не то же самое, но я считаю, что его проще использовать.

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