Вы можете использовать logrotate для управления Catalina.out
Это можно сделать, дважды вызвав grep -немного затратно, но работает. Предположим, что ваш файл шаблона — pat.txt, а файл, который вы хотите найти, — data.txt.
paste <(grep -o -f pat.txt data.txt ) <(grep -f pat.txt data.txt )
Мы используем подстановку процесса <(... )
, так что paste
обрабатывает два вывода двух команд как файлы. В первой команде опция -o
печатает только совпадающий шаблон Во второй команде печатается полная совпавшая строка.
Поскольку порядок от одного -до -один, два вывода можно безопасно вставить рядом (при условии, что во время выполнения grep ни в файл шаблона, ни в файл данных не было внесено никаких изменений.)
Если переключение на расширенные регулярные выражения (, такие как 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