Linux grep вывод строк со словами разной длинны
Как вывести строки где есть слова из 6 букв но нет слов из 8 букв с помощью утилиты grep
Я пробовал такой вариант, но это не работает:
cat city.txt | grep -E -v ' ([a-zA-Z]{8}) ' | grep -E ' ([a-zA-Z]{6}) '
Такая команда выводит:
Belgrade Serbia 1166763
Warsaw Poland 1748916
Paris France 2241346
В первой строке есть слово из 8 букв
Ответы (2 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Символ \b в регулярном выражении обозначает границу слова. Он устанавливается в позиции где слева начало текста/строки или пробельный символ, справа непробельный символ. Или наоборот: слева непробельный символ, справа пробельный или конец текста/строки. Сам символ места не занимает. Каждый раз когда вы ищите слова окружая их пробелами вспоминайте про \b:
cat city.txt | grep -E -v '\b([a-zA-Z]{8})\b' | grep -E '\b([a-zA-Z]{6})\b'
Автор решения: PotroNik
→ Ссылка
Так же можно воспользоваться стандартным решением grep:
-w, --word-regexp ШАБЛОН должен подходить ко всем словам
grep -viwP '[A-Z]{8}' city.txt | grep -iwP '[A-Z]{6}'