本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、ZIPファイルの中を文字列検索する「zipgrep」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はZIPファイルの中を文字列検索する「zipgrep」コマンドです。
「zipgrep」はZIPファイルに収納されているファイルを対象に、文字列を検索するコマンドです。ZIPファイルを作成したり、内部からファイルを取り出したりすることはできません。
ZIPファイルの作成にはzipコマンド(連載第34回、第36回、第37回)を使い、ZIPファイルから元のファイルを取り出す際にはunzipコマンド(第35回、第37回、第38回)を使用します。
zipgrepコマンドの検索時には、単純な文字列だけではなく、grepコマンド(第9回、第10回、第11回)のオプションや、「-E」オプション使用時相当の拡張正規表現を使用できます(※1)。ただし、筆者が試した限り、CentOS 7のzipgrep(unzip-6.0-13.el7.x86_64に収録)やUbuntu 18.04 LTSのzipgrep(unzip 6.0-21ubuntuに収録)では、長いオプションは使用できないようです。また、「-e」オプションの複数指定や、or検索(|記号)など一部の拡張正規表現が使用できませんでした。
※1 「-E」は拡張正規表現を使用する際のオプション。「grep -E」は「egrep」コマンドでも実行できる。
zipgrep [オプション] 検索パターン ZIPファイル名 [対象ファイル...] [-x 除外ファイル...]
※[ ]は省略可能な引数を示しています
短いオプション | 意味 |
---|---|
-e 検索パターン | 検索パターンを指定する(※2) |
-f ファイル | ファイルに書かれているパターンを検索する(※2) |
-i | 大文字と小文字を区別しない |
-w | 単語全体で検索パターンと一致するものを検索する |
-x | 行全体が検索パターンと一致するものを検索する |
※2 他のオプションと併用する場合は最後に指定する。
短いオプション | 意味 |
---|---|
-v | 検索パターンに一致しない行を表示する |
-s | エラーメッセージを表示しない |
-q | 結果を表示しない(主にシェルスクリプトなどで判定用に使う) |
-L | 一致するものが含まれていないファイルのファイル名のみ表示する |
-l | 一致するものが含まれていたファイルのファイル名のみ表示する |
-c | 一致するものが含まれていた回数のみ表示 |
-m回数 | 検索パターンが指定した回数に達したら処理を終了する |
-o | 一致した箇所だけを表示する(通常は行単位で表示) |
-n | 行番号を併せて表示する |
-b | 検索パターンがファイルの先頭から何文字目にあるかを併せて表示する |
-H | ファイル名を併せて表示する |
-h | ファイル名を表示しない(複数ファイル指定時) |
-B行数 | 一致した行の前の行も表示する |
-A行数 | 一致した行の後の行も表示する |
-C行数, -行数 | 一致した行の前後の行も表示する |
正規表現 | 意味 | 例 | マッチする文字列 |
---|---|---|---|
^ | 行頭 | ^abc | abcから始まる行 |
$ | 行末 | abc$ | abcで終わる行 |
. | 改行以外の任意の1文字 | a.c | a7cなど |
[...] | 囲まれている文字のどれか | [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 |
「zipgrep 検索パターン ZIPファイル名」で、ZIPファイルに収納されているファイルを対象に、文字列を検索します。ZIPファイル名の拡張子「.zip」を省略できます(※3)。
検索パターンが見つかった場合、「ファイル名:該当する行の内容」を表示します。バイナリファイル内の文字列に一致した場合は行の内容を示さず、「ファイル名:バイナリファイル(標準入力)に一致しました」のように表示します。
※3 省略した場合、ZIPファイルでない形式のファイルが存在するとエラーになる(例えばcompress.zipとcompressなど)。
zipgrep 検索パターン ZIPファイル名
(ZIPファイル内で検索パターンに当てはまるファイル名と該当行の内容を表示する)
zipgrep FILENAME mydata.zip
(mydata.zip内のファイルを対象に「FILENME」という文字列を検索する)
「zipgrep 検索パターン ZIPファイル名 対象ファイル」で、ZIPファイル内の対象ファイルだけを検索できます。さらに「-x 除外ファイル」で除外するファイルも指定できます。「-x 除外ファイル」はZIPファイル名や対象ファイル名の後に指定しなければなりません。
なお、ZIPファイルに収納されているファイルは、zipinfoコマンド(第241回)や、「unzip -t ZIPファイル名」で確認できます。
zipgrep 検索パターン ZIPファイル名 対象ファイル
(ZIPファイル中の対象ファイルから検索する)
zipgrep 検索パターン ZIPファイル名 -x 除外ファイル
(ZIPファイル中の除外ファイル以外から検索する)
zipgrep 検索パターン ZIPファイル名 対象ファイル -x 除外ファイル
(ZIPファイル中で除外ファイルを除き対象ファイルから検索する)
zipgrep 検索パターン ZIPファイル名 "*.txt"
(ZIPファイル内の「*.txt」ファイルから検索する)
検索の結果見つかった行だけではなく、前後の行も表示したい場合は、「-C行数」または「-行数」を指定します。見つかった行の前の行と後ろの行を指定した行数分表示します。なお、複数行が検索パターンに該当した場合は「ファイル名:--」で区切って表示します(※4)。
前の行数は「-B行数」、後ろの行数は「-A行数」で指定します。grepコマンドと違い、「-A」「-B」「-C」オプションの後に空白を入れることはできません。
※4 複数行が該当した場合でも表示範囲が重なった場合は「ファイル名:--」を表示しない。
zipgrep -C2 文字列 ZIPファイル名
(見つかった箇所の前後2行も併せて表示)
zipgrep -2 文字列 ZIPファイル名
(見つかった箇所の前後2行も併せて表示)
grepコマンドを使って検索した場合、「--color」オプションを使うことで、検索パターンに該当した箇所に色を付けて表示できます。CentOSやUbuntuでは、「grep」に「grep --color=auto」というエイリアスがあらかじめ指定されています。このため、「grep 検索パターン ファイル名」で、検索結果をカラー表示します。
zipgrepコマンドでは「--color」オプションが使えません。色付きにしたい場合は、「zipgrep 検索パターン ZIPファイル名 | grep 検索パターン」のように、検索結果をgrepコマンドに渡すとよいでしょう。
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.