Toto jsem napsal a očekávalo se, že dostanu pouze protokol uživatele v ""
. Ale mám na serveru celé logy:
for i in `ls *.log.gz`; do zcat $i | grep "U2779897722719715411" >> sara.log; done ; *
Co bych měl v této smyčce změnit, abych našel pouze protokol s tímto klíčovým slovem?
Děkuji.
Přijatá odpověď:
zgrep
příkaz je velmi užitečný pro grepování v komprimovaných souborech a vyhýbá se tomu, abyste museli předávat zcat
na grep
. Také nemusíte používat smyčku for k vytvoření seznamu souborů pomocí globbingu (shoda vzoru shellu).
zgrep U2779897722719715411 *.log.gz >> sara.log
Tento příkaz vypíše název souboru a řádek obsahující U2779897722719715411 oddělené znakem :
postava.
Pokud nechcete předponu souboru, můžete použít -h
možnost zgrep
:
zgrep -h U2779897722719715411 *.log.gz >> sara.log
Toho lze také dosáhnout pomocí smyčky, ale vyhněte se použití ls
a po dokončení smyčky proveďte přesměrování do souboru:
for i in *.log.gz ; do zgrep U2779897722719715411 "$i" ; done >> sara.log
Případně, pokud chcete pouze názvy souborů, které obsahují tento uživatelský řetězec U2779897722719715411, můžete použít -l
možnost zgrep
v některém z výše uvedených příkazů:
zgrep -l U2779897722719715411 *.log.gz >> sara.log
nebo
for i in *.log.gz ; do zgrep -l U2779897722719715411 "$i" ; done >> sara.log