Как найти только определенное ключевое слово в этом zcat цикле?

Это - то, что я ввел, и я, как ожидали, вложу только журнал пользователя "". Но у меня есть целые журналы в сервере:

for i in `ls *.log.gz`; do zcat $i |  grep "U2779897722719715411" >> sara.log;  done ; *

Что я должен изменить в этом цикле для нахождения только журнала с этим ключевым словом?

Спасибо.

4
задан 7 February 2017 в 12:22

1 ответ

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

zgrep U2779897722719715411 *.log.gz >> sara.log

Та команда произведет имя файла и строку, содержащую U2779897722719715411, разделенный a : символ.

Если Вы не хотите префикс имени файла, можно использовать -h опция к zgrep:

zgrep -h U2779897722719715411 *.log.gz >> sara.log

Это может также быть достигнуто с циклом, но избегать использования ls, и выполните перенаправление в файл после того, как цикл завершится:

for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log

Кроме того, если Вы только хотите имя файла файлов, которые содержат ту пользовательскую строку U2779897722719715411, можно использовать -l опция к zgrep в любой из вышеупомянутых команд:

zgrep -l U2779897722719715411 *.log.gz >> sara.log

или

for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log
9
ответ дан 1 December 2019 в 09:03

Другие вопросы по тегам:

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