BASH: как Grep и отображает набор значений

В примере сообщения журнала мы имеем

20161110-15:29:39.707932513|8=FIX.4.29=031735=D34=00000389552=20161110-15:29:39.70749=413050=11156=DDG109=4130115=EAGLE7|EAGLE7116=eagle_fix_trader11|eagle_fix_trader11144=DAU|E7T9139=eagle_fix_trader119195=U439=805440=150854029208=221=1167=FUT55=14198040=259=054=111=41301110400144=0000035.0000000038=00000000760=20161110-15:29:39.70710=092 

из вышесказанного, как вы можете отображать только значение 9139, чтобы оно выглядело

  • Как получить имя ближайшей интерактивной оболочки предка из сценария?
  • Печать количества файлов, имеющих одинаковое имя для каждого файла из каталога
  • Как я могу проанализировать ini-файл, чьи значения могут содержать определенные символы?
  • Могу ли я запустить grep из cPanel без SSH?
  • Извлечь файлы csv из пути в несколько файлов в bash
  • Файл читается всеми, но я не могу открыть файл
  •  9139=eagle_fix_trader11 

    Я использовал команду ниже

     ls | grep -Eo '9139=[az]{0,8}' 9707le8.log 

    Но я только получаю

     9139=eagle 

    вместо

     9139=eagle_fix_trader11 

    Есть идеи?

  • Ошибка команды grep
  • Автоматизация создания сертификатов OpenSSL, подписка Let'sEncrypt и связывание dir сайта в среде Nginx
  • Найти первое появление каждого из этих шаблонов с помощью grep
  • Сравнение двух файлов и запись несогласованных строк вместе с несогласованными столбцами. Указание несогласованных столбцов - это моя основная проблема
  • Преобразование вывода диска в читаемую HTML-почту
  • sh + как использовать массив в sh-скрипте для печати всех значений в массиве
  • One Solution collect form web for “BASH: как Grep и отображает набор значений”

    Прежде всего, ls | это совершенно бесполезно. Вы хотите выполнить поиск внутри файла 9707le8.log , а не в списке файлов и 9707le8.log в вашем текущем каталоге (что и печатает ls ). В любом случае grep игнорирует любые входящие в него сообщения ( | grep ), когда ему также предоставляется имя файла для поиска в командной строке, как у вас.

    Тем не менее, ваше регулярное выражение означает «найти строку 9139= , а затем <= 8 строчных букв». Однако после = 5 букв; 6-й символ – это _ и который не является частью группы символов [az] . Простое решение – добавить его в класс:

     $ grep -Eo '9139=[a-z_]{0,8}' 9707le8.log 9139=eagle_fi 

    Теперь, поскольку вы хотите 9139=eagle_fix11 , вам нужно увеличить символы:

     $ grep -Eo '9139=[a-z_]{0,18}' 9707le8.log 9139=eagle_fix_trader 

    На этот раз проблема заключается в том, что вы не сопоставляете числа, поскольку [a-z_] не включает их. Итак, вы хотите что-то вроде этого:

     $ grep -Eo '9139=[a-z_0-9]{0,18}' 9707le8.log 9139=eagle_fix_trader11 

    Или, для более общего случая, где вы хотите 9139= строкой строчных букв или _ а затем двумя номерами, вы можете использовать:

     $ grep -Eo '9139=[a-z_]+[0-9]{2}' 9707le8.log 9139=eagle_fix_trader11 

    Или, с GNU grep:

     $ grep -Po '9139=[a-z_]+\d{2}' 9707le8.log 9139=eagle_fix_trader11 
    Linux и Unix - лучшая ОС в мире.