Jak przeszukać pliki w spakowanych archiwach GZ i znaleźć dowolny tekst?
W wielu systemach logi i inne pliki archiwizuje się przy pomocy GZIP
. Czasami zachodzi jednak potrzeba poszukania w którym z tych plików znajduje się konkretny tekst. Przejdźmy wpierw do przykładu.
W naszym katalogu znajdują się pliki:
plik.gz
plik1.gz
plik2.gz
plik3.gz
plik4.gz
Szukamy informacji w którym z archiwum znajduje się ciąg znaków “szukany tekst
“. Chcemy również wyświetlić całą linię w której znajduje się poszukiwana fraza. Jak zatem możemy tego dokonać?
Skorzystamy z polecenia gunzip
, którego składnia wygląda następująco:
gunzip -c plik.gz | grep "szukany tekst"
Powyżej wskazaliśmy konkretny plik w którym dokonujemy poszukiwań. Ponieważ w pliku plik.gz
znajdowała się szukana fraza otrzymaliśmy wynik jak poniżej:
w trakcie poszukiwania znaleziono szukany tekst
Możemy również wykonać poniższe polecenie, które przeszuka wszystkie pliki GZ
w bieżącym katalogu:
gunzip -c *.gz | grep "szukany tekst"
W ten sposób dowiemy się czy w którymś pliku znajduje się “szukany tekst
“. Jego wynik jest następujący:
w trakcie poszukiwania znaleziono szukany tekst
szukany tekst znalazł się również w tym pliku
Z wyniku widzimy, że fraza “szukany tekst
” została znaleziona dwa razy. Nie wiemy jednak, czy szukany tekst znajduje się w jednym czy wielu plikach, a tym bardziej konkretnie w których plikach. Jak możemy zatem się tego dowiedzieć? Stosując np. pętle for
. Spójrzmy na poniższy przykład:
for plik in `ls -1 *.gz`; do linia=`gunzip -c $plik | grep "szukany tekst"` echo $plik " ->" $linia done
W wyniku powyższego polecenia otrzymaliśmy:
plik.gz -> w trakcie poszukiwania znaleziono szukany tekst
plik1.gz ->
plik2.gz ->
plik3.gz -> szukany tekst znalazł się również w tym pliku
plik4.gz ->
Zatem jak widzimy, “szukany tekst
” znajduje się w plikach: plik.gz
oraz plik3.gz
.