Как печатать только уникальные совпадения из регулярного выражения?

Предположим, у меня есть файл со следующим текстом:

  1. Номер 1
  2. NUMBER_3
  3. Номер 1
  4. NUMBER_4

Как я могу использовать регулярное выражение для печати только один раз за каждый номер Number_n ? С помощью:

grep -oE "Number_\w+" 

Дает мне все спички:

Номер 1

NUMBER_3

Номер 1

NUMBER_4

Но я хочу получить следующий результат:

Номер 1

NUMBER_3

NUMBER_4

  • Линия печати, использующая только egrep
  • sed / awk / grep найти строку между точкой с запятой
  • Собирать информацию об использовании работы в кластере
  • Как я рекурсивно grep через сжатые архивы?
  • Использование пустой строки в качестве контекста «group-separator» для grep
  • Как искать файл для каждой записи в списке и печатать новый файл для каждой записи
  • Regex ищет корни слова с общими префиксами
  • Поиск нескольких шаблонов в определенном столбце в файле фиксированной длины и вывод всей строки
  • 4 Solutions collect form web for “Как печатать только уникальные совпадения из регулярного выражения?”

    (О, хорошо, редактирование немного меняет вопрос.)

    Легкий способ печати только одной копии каждой выходной строки – передать через sort -u (или sort | uniq ), хотя это, очевидно, будет сортировать вывод.

    Другие связанные с этим решения: печать уникальных строк


    (Ответ на то, что я изначально думал, был вопрос 🙂

    Чтобы напечатать только первую строку, соответствующую регулярному выражению, мы можем использовать grep -m1 ... :

     -m NUM, --max-count=NUM Stop reading a file after NUM matching lines. 

    Если совпадения находятся на разных строках, это работает напрямую, но если у вас несколько строк соответствия в одной строке, то с -o они будут напечатаны, поэтому добавьте что-то вроде | head -1 | head -1 .

     grep -oE "Number_\w+" | sort -u 

    С GNU grep :

     $ echo Number_1 Number_2 | grep -Pom1 '^.*?\KNumber_\d+' Number_1 

    Это совпадение с начала строки до первого появления Number_\d+ , но с \K отбросить то, что находится слева от него.

     $ awk '{print $NF}' file | sort -u Number_1 Number_3 Number_4 $ awk '{Arr[$NF]++}END{for(i in Arr)print i}' file Number_3 Number_4 Number_1 
    Interesting Posts

    Доступ к локальному gpu, когда ssh на удаленном сервере

    Какова команда для перечисления всех пользователей, входящих в группу администратора?

    Предотвращение падения пакетов IPv6 Router Solisitation (Type 133)

    Ввод пунктуации добавляет акцент на предыдущее письмо после того, как мой ноутбук состыкован в течение нескольких минут

    вопрос производительности linux kvm

    Есть ли способ настроить TCP на потерю пакетов и повторную передачу?

    проблема с псевдонимом интерпретируется в аргументах команды

    Простое уведомление о завершении программы

    как выполнять команды (удаленные, асинхронные, pull)

    Создание раздела ext2 для FreeBSD 10.1, работающего на базе x86 с разделением MBR

    Команда Linux – mount возвращает ноль / 0, но не работает

    Драйвер Nvidia для ядра 4.4.1? Любая удача, кто-нибудь?

    Как запустить jenkins?

    Как проверять информацию о структуре каталогов файла unix / linux?

    Мост беспроводной сети

    Linux и Unix - лучшая ОС в мире.