в grep -f, могу ли я напечатать, какой шаблон вызвал совпадение вместо совпавшего шаблона?

Вы можете использовать logrotate для управления Catalina.out

https://dzone.com/articles/how-rotate-tomcat-catalinaout

1
12.01.2020, 17:23
2 ответа

Это можно сделать, дважды вызвав grep -немного затратно, но работает. Предположим, что ваш файл шаблона — pat.txt, а файл, который вы хотите найти, — data.txt.

paste <(grep -o -f pat.txt  data.txt ) <(grep -f pat.txt data.txt )

Мы используем подстановку процесса <(... ), так что pasteобрабатывает два вывода двух команд как файлы. В первой команде опция -oпечатает только совпадающий шаблон Во второй команде печатается полная совпавшая строка.

Поскольку порядок от одного -до -один, два вывода можно безопасно вставить рядом (при условии, что во время выполнения grep ни в файл шаблона, ни в файл данных не было внесено никаких изменений.)

0
27.01.2020, 23:55

Если переключение на расширенные регулярные выражения (, такие как grep -E), допустимо, вы можете вместо этого использовать awkи сделать это как:

awk '
  !end_of_re_list {if (!(re[$0]++)) n++; next}
  {
    for (i in re)
      if ($0 ~ i) {
        print i
        delete re[i]
        if (--n == 0) exit
      }
  }' input_pat.txt end_of_re_list=1 match_in.txt
0
27.01.2020, 23:55

Теги

Похожие вопросы