Grep Pattern и следующее слово

У меня есть текстовый файл с такими строками (только две последние строки):

1 sometext Pattern 2 sometext Pattern 5Asda5} 3 sometext Pattern asd2-asd 4 sometext Pattern ad 5 sometext Pattern foobar 6 sometext Pattern {asd 7 Pattern Pattern something 123asd 8 Pattern sometext asd 9 Pattern 5h{1,2}b 

Мне нужно найти каждую строку с «Шаблон» в качестве последнего слова. Слово в этом случае определяется как строка с буквами и дефисами. Могут быть ведущие пробелы или пробелы, следующие за строкой (например: Pattern \ t \ t \ t \ t \ t $)

Мой взгляд на это

 egrep '(\bPattern\b +[^a-zA-Z\-]{2,} *$)|(\bPattern\b *$)' file.txt 

найти все строки с шаблоном, за которым следуют пробелы и не-слово в конце или с шаблоном в конце. Но первая часть работает не так, как предполагалось. Мне нужен другой способ найти не-слова.

Не могли бы вы показать мне путь к линии grep 1,2,3,6,9, но не к остальным? Мне нравится держаться подальше от awk, поскольку мы не покрывали его в классе.

  • Греп из файла с двойным gzip
  • Показать весь файл до матча
  • Как удалить строку из тега в сценарии оболочки?
  • Как сделать вертикальную полосу | работа в grep?
  • распространять продукцию через FIFO
  • Греблирование только SSH-соединений с netstat
  • Получение списка пользователей с помощью grepping / etc / passwd
  • Объединение команд строк и grep: как ограничить результаты строками с нулевым завершением
  • One Solution collect form web for “Grep Pattern и следующее слово”

    Обратите внимание, что \b , в реализациях grep которые его поддерживают, – это переход между символом слова (alnum и underscore) и символом без слова (или наоборот). Итак, \bPattern\b будет соответствовать, например, в foo-Pattern.bar .

    Если вы ищете слово с разметкой в ​​виде пустого поля, вы не можете использовать \b .

    Здесь вам кажется, что вы ищете Pattern ограниченным разделителем, за которым следует список нулевых или более строк с разделителями, которые имеют символы, отличные от букв, и - , поэтому:

     non_word='([^[:blank:]]*[^[:blank:][:alpha:]-][^[:blank:]]*)' grep -E "(^|[[:blank:]])Pattern([[:blank:]]+$non_word)*[[:blank:]]*$" - non_word='([^[:blank:]]*[^[:blank:][:alpha:]-][^[:blank:]]*)' grep -E "(^|[[:blank:]])Pattern([[:blank:]]+$non_word)*[[:blank:]]*$" 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.