Это - то, что я ввел, и я, как ожидали, вложу только журнал пользователя ""
. Но у меня есть целые журналы в сервере:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Что я должен изменить в этом цикле для нахождения только журнала с этим ключевым словом?
Спасибо.
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