Linuxコマンド zipgrep(zip形式のファイルから文字列を検索する)

zip形式で圧縮されているファイルから特定の文字列を検索できるzipgrepコマンドの概要と使用方法を記録しています。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

概要・使用方法

grepコマンドでZIP形式のファイルを伸張して検索することができますが、zipgrepコマンドを使用することにより、ZIP形式のファイルを伸張することなく検索することができます。「-i」オプションを付けるとアルファベットの大文字と小文字を区別せずに検索することができます。

用途としては、過去のサーバーログファイルが圧縮されている場合重宝するかと思います。

書式

$zipgrep [オプション] [検索パターン] [ファイル名]

拡張子が「.gz形式」に関しては、互換性がないためzipgrepコマンドで検索ができません。zgrepコマンドを使用します。

オプション

-i大文字と小文字を区別せず検索することができる。
-e パターン「-」で始まるパターンを指定するときに使用します。
-f ファイルファイルに書かれているパターンを検索する
-w単語全体で検索パターンと一致するものを検索する
-x行全体が検索パターンと一致するものを検索する
-vパターンに一致しなかった行を出力します。
-s読めないファイルや存在しないファイルは無視します。エラーメッセージを抑止します。
-q結果を表示しない※シェルスクリプトで主に使用する
-Lパターンを含まないファイルの名前だけを標準出力に出力します。
※-Lオプションと-lオプションは,最後に指定したオプションが有効となります。
-Iバイナリファイルを無視します。
-lパターンを含むファイルの名前だけを標準出力に出力します。
※-Lオプションと-lオプションは,最後に指定したオプションが有効となります。
-C一致するものが含まれていた回数のみ表示
-m 回数検索パターンが指定した回数に達したら処理を終了する
-o一致した箇所だけを表示する(通常は行単位で表示)
-n各出力行にファイルの相対的な行番号を出力します。
※-cオプション,-Lオプション,-lオプション,および-qオプションを指定した場合は無視されます。
-b検索パターンがファイルの先頭から何文字目にあるかを併せて表示する
-Hファイル名を併せて表示する
-hファイル名を表示しない(複数ファイル指定時)
-B行数一致した行の前の行も表示する
-A行数一致した行の後の行も表示する
-C行数, -行数一致した行の後の行も表示する
オプション一覧表

zipアーカイブファイル前のオプションはすべてegrepにすべて渡されます。

【利用可能な正規表現】

正規表現意味マッチする文字列
^行頭^abcabcから始まる行
$行末abc$abcで終わる行
.改行以外の任意の1文字a.ca7cなど
[…]囲まれている文字のどれか[abc]abcのどれか
[^…]囲まれている文字でない文字[^abc]aやbやc以外
[n-n]指定範囲のどれかの文字[a-c]abcのどれか
*直前文字の0回以上の繰り返しab*aやabbbなど
+直前文字の1回以上の繰り返しab+abやabbなど
{n}直前文字のn回の繰り返し[0-9]{3}3桁の数値
{n,}直前文字のn回以上の繰り返し[0-9]{3,}3桁以上の数値
{,m}直前文字のm回以下の繰り返し[0-9]{,5}5桁以下の数値
{n,m}直前文字のn回~m回の繰り返し[0-9]{3,5}3~5桁の数値
()()内をひとまとまりとする(abc){2}abcabc

egrepで受け入れられる任意の文字列及び正規表現を使用できます。

【基本使用例】

zip内を検索する

$zipgrep -i 'usb' dmesg.zip 

実行結果

[centos@work ~]$ zipgrep -i 'usb' dmesg.zip 
dmesg.txt:[    1.209338] ACPI: bus type USB registered
dmesg.txt:[    1.212261] usbcore: registered new interface driver usbfs
dmesg.txt:[    1.215838] usbcore: registered new interface driver hub
dmesg.txt:[    1.219358] usbcore: registered new device driver usb
dmesg.txt:[    2.034188] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
dmesg.txt:[    2.041371] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
dmesg.txt:[    2.048428] uhci_hcd: USB Universal Host Controller Interface driver
dmesg.txt:[    2.056468] uhci_hcd 0000:00:01.2: new USB bus registered, assigned bus number 1
dmesg.txt:[    2.069396] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 3.10
dmesg.txt:[    2.075378] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
dmesg.txt:[    2.080873] usb usb1: Product: UHCI Host Controller
dmesg.txt:[    2.084316] usb usb1: Manufacturer: Linux 3.10.0-1160.15.2.el7.x86_64 uhci_hcd
dmesg.txt:[    2.089822] usb usb1: SerialNumber: 0000:00:01.2
dmesg.txt:[    2.093305] hub 1-0:1.0: USB hub found
dmesg.txt:[    2.099493] usbcore: registered new interface driver usbserial_generic
dmesg.txt:[    2.103800] usbserial: USB Serial support registered for generic
dmesg.txt:[    2.160038] usbcore: registered new interface driver usbhid
dmesg.txt:[    2.163577] usbhid: USB HID core driver
dmesg.txt:[    2.414337] usb 1-1: new full-speed USB device number 2 using uhci_hcd
dmesg.txt:[    2.583184] usb 1-1: New USB device found, idVendor=0627, idProduct=0001, bcdDevice= 0.00
dmesg.txt:[    2.588808] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=5
dmesg.txt:[    2.593139] usb 1-1: Product: QEMU USB Tablet
dmesg.txt:[    2.596394] usb 1-1: Manufacturer: QEMU
dmesg.txt:[    2.599357] usb 1-1: SerialNumber: 42
dmesg.txt:[    2.609922] input: QEMU QEMU USB Tablet as /devices/pci0000:00/0000:00:01.2/usb1/1-1/1-1:1.0/input/input4
dmesg.txt:[    2.616552] hid-generic 0003:0627:0001.0001: input,hidraw0: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb-0000:00:01.2-1/input0