Я пытаюсь извлечь информацию из лог-файлов с помощью Perl и регулярных выражений из командной строки:Perl регулярное выражение - извлечь две секции в каждой строке
cat file_1 | perl -ne 'print if s/(2015-09-..) .*for (.\d+,\d)/\1/'
2015-09-02 20:03:05,037 INFO [ajp-bio-10.247.96.38-27032-exec-92] (RegisterOnlineAction:474) - REGISTRATION for [735078385,1]: Perform Action.
2015-09-02 20:26:41,383 INFO [ajp-bio-10.247.96.39-27002-exec-66] (RegisterOnlineAction:474) - REGISTRATION for [724314312,1]: Perform Action.
2015-09-02 21:09:47,890 INFO [ajp-bio-10.247.96.38-27002-exec-65] (RegisterOnlineAction:474) - REGISTRATION for [328057138,1]: Perform Bill.
Но я не получаю выход мне нужно.
Что мне нужно было бы:
2015-09-02 735078385,1
2015-09-02 724314312,1
2015-09-02 328057138,1
«печать, если s/текст/текст /» делает поиск и замену, и, вероятно, не лучший способ. Но есть ли способ выбрать несколько разделов на строку и получить их на выходе.
Обновите свое регулярное выражение до '\ [(. \ D +, \ d) \]' для соответствия квадратных скобок. –
это дает мне аналогичный выход как исходная команда: cat file_1 | perl -ne 'print if s/(2015-09- ..). * for \ [(. \ d +, \ d) \]/\ 1 /' 2015-09-02: выполнить действие. 2015-09-02: выполнить действие. 2015-09-02: Выполнить законопроект. – user3292147