2016-12-24 5 views
2

Я пытался создать регулярное выражение, которое будет использоваться в команде grep для соответствия строкам, которые не содержат слова. В приведенном ниже примере у меня есть слова uhu, uhuu, uhuuu, uhuuu по одному в каждой строке. Я использовал эхо, чтобы сделать это в одной команде. Результаты:Regex для соответствия строк, не содержащих слова

line1 = uh - end 
line2 = uhu - end 
line3 = uhuu - end 
line4 = uhuuu - end 
line5 = uhuuuu - end 

Не обращайте внимания на номер строки и конечное слово. Итак, я хотел Grep uhuu с 2-х и 4-х повторений только, что линия 3 и 5. Я попробовал:

echo -e 'line1 = uh - end\nline2 = uhu - end\nline3 = uhuu - end\nline4 = uhuuu - end\nline5 = uhuuuu - end' | grep -E 'uh(u{2}|u{4})' 
line3 = uhuu - end 
line4 = uhuuu - end 
line5 = uhuuuu - end 

Он приносит линию 3 и 5, а также линии 4, потому что uhuuu имеет 2 U-х, плюс 3-й. Итак, мой вопрос, используя Regex, можно ли исключить эту четвертую строку, учитывая только слово «uhuuu»?

Я знаю, что смогу выполнить это с помощью трубы и grep -v в конце всего, но мне было интересно, можно ли это сделать с помощью RegEx.

Я проверил эту ссылку, но не смог найти способ заставить ее работать для моего дела. Спасибо https://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word#=

+0

попытки задать расширенное -v "эм (и {2} | и {4})" – Devian

+0

@Devian что страдает от тех же проблем : 'uhu {2}' совпадает с по крайней мере двумя завершающими 'u' и поэтому будет соответствовать более длинным элементам. – Ouroborus

+0

Кажется, что это, моя ошибка – Devian

ответ

1

Используйте слово границы меты символов после группировки:

grep -E 'uh(u{2}|u{4})\b' 
+0

Правильно @revo, я уже пробовал, но даже забыл. спасибо –