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, чтобы оно выглядело

 9139=eagle_fix_trader11 

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

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

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

 9139=eagle 

вместо

 9139=eagle_fix_trader11 

Есть идеи?

  • Цитирование файлов листинга в UNIX
  • Каков наиболее эффективный способ регистрации ошибок сценария оболочки crontab с ошибкой?
  • наблюдение за выполнением скрипта с помощью скрипта monit, похоже, игнорирует каналы
  • Как создать сценарий переключения вывода xrandr?
  • Печать строк с похожим текстом вместе
  • команда bash / script для сброса маршрута по умолчанию
  • Почему бы не использовать обратные ссылки для цикла
  • Каков наилучший способ сделать функцию bash в скрипте в качестве параметра при запуске через командную строку?
  • 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 
    Interesting Posts

    Правила брандмауэра IPv6, похоже, препятствуют всем подключениям

    Переименуйте несколько файлов, подкаталогов и вставьте символы в определенном месте на OSX

    Разница между xattr и chattr

    Где функция bash для открытия команды в $ EDITOR задокументирована?

    Почему некоторые пакеты используют «make install», а другие используют «sudo make install»,

    Как запретить доступ для виртуальных каталогов в .htaccess для всех IP и accep для 1 IP?

    На каких файлах действует инструмент Twnak Gnome (при изменении настроек ввода)?

    Установка Steam на Debian Wheezy

    Возможна ли передача файлов на хост-хост через USB Type-C?

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

    Может ли mutt удалять сообщение локально, но сохранить его на сервере?

    libcurl4-gnutls-dev: Зависит от libldap2-dev, но он не будет установлен

    Пользовательские привилегии Mysql: Только таблица CREATE

    Контролируйте, как долго Rsnapshot сохраняет файл после удаления

    Разрешения UMASK для новых каталогов

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