Grep регулярное выражение для отображения только серийных номеров (определенной длины, содержащих альфа и цифру) в файле CSV

У меня много (огромных и хаотичных) CSV-файлов с кучей (Cisco) серийных номеров.

Моя цель состоит в том, чтобы извлечь их (кстати: и позднее позвонить в Cisco API для получения отзыва о покрытии услуг / поддержки)

Теперь я ищу правильный способ обработки этого файла CSV.

Мне интересно, есть ли другие, а также почему мой первоначальный «предпочтительный» не работает – он использует именованный class, который содержит комбинацию [: alpha:] AND [: digit:].

Чтобы расшифровать серийный номер, вот как он составлен.

Формат Cisco S / N: LLLYYWWXXXX.

LLL = код местоположения (т. Е. FOC = FoxConn China)

ГГ = Код года (08 = 2004 … 09 = 2005 … и т. Д.)

WW = код недели (недели с 01 по 52)

XXXX = Буквенно-цифровой алфавит Base-34 Уникальный идентификатор (включает от 0 до 9 и весь алфавит, кроме I & O).

Источник: https://community.spiceworks.com/how_to/96973-cisco-device-serial-number-explanation

# Doesn't Work grep -E -o -w "[[:alnum:]]{11}" Inventory.csv | head Description UNIVERSALK9 techsupport FCW203..... UNIVERSALK9 techsupport FCW203..... UNIVERSALK9 techsupport FDO201..... [..] # Does work grep -o -w -P '([AZ]){3}[0-9]{4}[[:alnum:]]{4}' Inventory.csv FCW1234A1EF FCW1234A1NG FDO1234A1KB FDO1234A103 FOC1234A137 FCW1234A10A FOC1234A1GH FOC1234A1GU [..] 

One Solution collect form web for “Grep регулярное выражение для отображения только серийных номеров (определенной длины, содержащих альфа и цифру) в файле CSV”

Ваш начальный grep был слишком “свободным”, как и регулярные выражения. Вы запросили его для [[:alnum:]]{11} , что означает 11 «буквенно-цифровых символов», что позволяет использовать эти термины, отличные от Cisco-serial-number:

  • техническая поддержка
  • Описание
  • UNIVERSALK9

Ваш второй grep “более жесткий”, что означает, что он немного более ограничен в том, что он будет соответствовать. Это все еще не очень подходит для серийного номера Cisco, хотя, двумя способами:

  • [0-9]{4} допускает 4 цифры, от нуля до девяти; это позволит использовать недействительные данные за неделю, например, 0899 или 0900 .
  • [[:alnum:]]{4} разрешит любые 4 буквенно-цифровых символа, которые позволят запрещенные I и O

Ваш второй grep будет перехватывать все серийные номера Cisco, поскольку он допускает не только требования, но и обманывать недопустимые серийные номера.

Я мог бы подойти к грязному файлу с помощью awk, потому что он допускает некоторое мощное сопоставление с образцом и манипулирование строками. Скрипт awk ниже выполняет две вещи на высоком уровне:

  1. переберите каждую строку ввода, ища что-то, что может быть серийным номером Cisco
  2. в этих строках ввода ищите каждое потенциальное совпадение; Пока есть совпадение, извлеките этот серийный номер и выполните дополнительный тест (проверяя, что значение «недели» действительно). Вы можете выполнить здесь годичные тесты, если знаете больше о том, что вы ожидаете от этих значений. Аналогично для кода местоположения, если вы ожидаете, что появится меньший набор местоположений.

Единственное, что я сделал, это изменил регулярное выражение, чтобы оно было более жестким по отношению к разделу Base-34.

Вот сценарий:

 awk ' BEGIN { recisco="[AZ]{3}[0-9]{4}[0-9ABCDEFGHJKLMNPQRSTUVWXYZ]{4}" } $0 ~ recisco { while(match($0, recisco) > 0) { week=substr($0, RSTART+5, 2); if (week > 1 && week < 54) { print "Found: "substr($0,RSTART,RLENGTH) } $0=substr($0, RSTART+RLENGTH); } }' 
  • проверьте обновление ping для большого количества машин
  • BASH не нравится мое регулярное выражение
  • Почему `* .ext` работает при поиске файла с расширением 'ext'
  • vim: команда для удаления точки с запятой, если это последний символ строки
  • Минимизированный код JSON между двумя шаблонами с помощью регулярных выражений
  • regex private ips и удалить из файла журнала
  • Извлеките адреса, разделенные точкой с запятой, и напечатайте каждый адрес в строке
  • Извлекать только IP-адреса из текста
  • Пакетное переименование папок со значением из значения json в package.json
  • Замена строки XPath в файле xsl
  • bash test - сопоставить слэши
  • Interesting Posts

    Плагины Nagios выполняются из серверных плагинов или клиентских плагинов?

    Установка Arch Linux на SD-карту – проблема записи таблицы разделов

    Больше не может попасть в Интернет на Kali Linux

    Разделение дисков LVM отсутствует

    Структура GNU / Linux

    Синхронизировать IMAP с папками maildir – быстрое и полное решение с поддержкой IDLE?

    Где можно задать дополнительные настройки (например, fast_reauth) в сетевом менеджере?

    Почему fdisk настаивает на запуске первого раздела в секторе 65535 (MiB 31.9995 …)

    Сглаживание структуры папок

    Как предотвратить шлоот от переопределения файла passwd и других файлов, уже присутствующих в chrooted системе?

    Где хранятся имена файлов в файловой системе?

    Как вставить строку в текстовый документ прямо перед строкой, содержащей некоторый текст в bash?

    аргументы программы логики agetty

    Как скопировать большие данные по сети?

    Безопасность xhost (локальная) и пересылка sudo xauthority

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