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

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

  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

  • grep в интерактивной программе
  • Как добавить фильтр в свой grep-скрипт, чтобы НЕ включать строку?
  • Grep вся строка, которая не начинается с числа (ей)
  • замените пустые поля на выходе «grep» на строку
  • Как я могу подсчитать количество повторений последовательности байтов в файле?
  • Изменен синтаксис grep -E regex?
  • Grep для строки, а затем повторить строку из записи
  • Поиск и удаление слов, начинающихся / заканчивающихся цифрами
  • 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

    Как отказаться от stderr в ограниченной оболочке Bash?

    Как создать последовательно пронумерованные имена файлов в bash?

    EFI Нет загрузчика. Конфигурационные файлы в \ loader \ entries \ *. Conf необходимы

    Маршрутизация openvpn

    Есть ли способ запустить VNC-сервер для уже запущенного X-сеанса?

    Использование столбца nos в качестве значения переменной

    С помощью ! История поиска bash для команд, начинающихся с цифры?

    Чтение длины значения по трубопроводу?

    Перенаправить вывод команды с переменными в массив

    / etc / motd не отображается при именованном канале?

    Как удалить конечные пробелы из переменной makefile?

    Что это означает, когда нумерация «core id» не имеет ядра с номером 0

    Вопрос о понимании Windows Manager / среды рабочего стола

    Является ли массив хранения ZFS переносимым для всех операционных систем и архитектур процессоров?

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

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