2016-12-18 3 views
1

Вот вывод журнала через journalctl -o verbose. Я пытался сузить его и отфильтровать только нужные значения.Как использовать grep в словаре-подобном файле

Fr 2016-12-02 18:54:33.675283 CET [s=asd;i=4;b=asdasd;m=asdasd;t=asdasd;x=asdasda] 
     PRIORITY=6 
     _BOOT_ID=5asd 
     _MACHINE_ID=3asd 
     _HOSTNAME=asd 
     _SOURCE_MONOTONIC_TIMESTAMP=0 
     _TRANSPORT=kernel 
     SYSLOG_FACILITY=0 
     SYSLOG_IDENTIFIER=kernel 
     MESSAGE=Iasdasadt 
     _SYSTEMD_CGROUP=/system.slice/systemd-journald.service 
     _SYSTEMD_UNIT=systemd-journald.service 

Когда я применяю что-то вроде - после того как я дамп результаты в .txt -

egrep -in -o --color '_SYSTEMD_UNIT=[^\n]*' /JOURNALD/verbose.txt 

Он возвращается;

_SYSTEMD_UNIT = Systemd-Jour

Вместо того, чтобы;

_SYSTEMD_UNIT = Systemd-journald.service

Я считаю, что я совершенно отсутствует принципиальный момент. Тем не менее, я не смог найти его до сих пор. Не стесняйтесь делиться своими идеями.

+0

Я не понимаю, почему люди вместо того, чтобы что-то говорить. – Elesmoth

+0

Вы пытаетесь получить все до следующей строки с помощью '[^ \ n] *'? –

+0

Да, он пытался прочитать всю строку. – Elesmoth

ответ

2

\n в вашем регулярном выражении не соответствует символам новой строки; он соответствует «n» в «journald». ([^\n] сопрягает ничего, кроме буквального \ или n характера здесь.) Вместо этого вы должны использовать .*$, который соответствует любой последовательности символов до конца строки:

egrep -in -o --color '_SYSTEMD_UNIT=.*$' /JOURNALD/verbose.txt

+0

Спасибо! Я поместил его в свой фрагмент кода, и он решил мои проблемы. – Elesmoth