1 xzgrepコマンドとは?
xzgrepコマンドは、以下の圧縮、非圧縮ファイルの中身を検索するコマンドです。
・xz
・lzma
・gzip
・bzip2
・lzop
・非圧縮
xzgrep invokes grep(1) on files which may be either uncompressed or compressed with xz(1), lzma(1), gzip(1), bzip2(1),
or lzop(1). All options specified are passed directly to grep(1).
2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンの版数は以下のとりです。
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
[root@server ~]# uname -r
4.18.0-240.el8.x86_64
3 圧縮、非圧縮ファイルの中身を検索する方法
3.1 事前準備
圧縮前のファイルを作成します。
[root@server xzgrep]# vi test.txt
[root@server xzgrep]# cat test.txt
111
abc
xz形式のファイルを作成します。
この時-k
オプションを指定して、圧縮前のファイルを残したままにします。
これ以降の全ての圧縮コマンドでも、同様に-k
オプションを指定して
圧縮前のファイルを残したままにします。
[root@server xzgrep]# xz -k test.txt
[root@server xzgrep]# file test.txt.xz
test.txt.xz: XZ compressed data
lzma形式のファイルを作成します。
[root@server xzgrep]# lzma -k test.txt
[root@server xzgrep]# file test.txt.lzma
test.txt.lzma: LZMA compressed data, streamed
gzip形式のファイルを作成します。
[root@server xzgrep]# gzip -k test.txt
[root@server xzgrep]# file test.txt.gz
test.txt.gz: gzip compressed data, was "test.txt", last modified: Fri Apr 16 14:08:01 2021, from Unix, original size 8
bzip2形式のファイルを作成します。
[root@server xzgrep]# bzip2 -k test.txt
[root@server xzgrep]# file test.txt.bz2
test.txt.bz2: bzip2 compressed data, block size = 900k
lzop形式のファイルを作成します。
[root@server xzgrep]# lzop -k test.txt
[root@server xzgrep]# file test.txt.lzo
test.txt.lzo: lzop compressed data - version 1.030, LZO1X-1, os: Unix
作成したファイルを確認します。
[root@server xzgrep]# ls -l
合計 24
-rw-r--r--. 1 root root 8 4月 16 23:08 test.txt
-rw-r--r--. 1 root root 45 4月 16 23:08 test.txt.bz2
-rw-r--r--. 1 root root 37 4月 16 23:08 test.txt.gz
-rw-r--r--. 1 root root 30 4月 16 23:08 test.txt.lzma
-rw-r--r--. 1 root root 70 4月 16 23:08 test.txt.lzo
-rw-r--r--. 1 root root 64 4月 16 23:08 test.txt.xz
3.2 実行結果
文字列111
が含まれるファイルを一括で検索してみます。
[root@server xzgrep]# xzgrep 111 test.txt*
test.txt:111
test.txt.bz2:111
test.txt.gz:111
test.txt.lzma:111
test.txt.lzo:111
test.txt.xz:111
文字列111
またはabc
が含まれるファイルを一括で検索してみます。
[root@server xzgrep]# xzgrep -e 111 -e abc test.txt*
test.txt:111
test.txt:abc
test.txt.bz2:111
test.txt.bz2:abc
test.txt.gz:111
test.txt.gz:abc
test.txt.lzma:111
test.txt.lzma:abc
test.txt.lzo:111
test.txt.lzo:abc
test.txt.xz:111
test.txt.xz:abc
同じことをzgrepコマンドで実行してみました。
gzファイルはマッチした文字列の表示がきますが、lzo,xzファイルは表示ができません。
他の圧縮ファイル(bz2,lzma)については、マッチした文字列の表示ができませんでした。
xzgrepの方がzgrepに比べ、検索できる圧縮ファイルの種類が多いようです。
[root@server xzgrep]# zgrep 111 test.txt*
test.txt:111
test.txt.gz:111
test.txt.lzo:バイナリファイル (標準入力) に一致しました
test.txt.xz:バイナリファイル (標準入力) に一致しました
4 圧縮ファイルの中身を確認する方法
lessコマンドを使うと、圧縮ファイルを解凍することなく中身を確認できます。
ただし、lzoファイルは圧縮したままでは確認することができませんでした。
bz2ファイルの中身を確認してみます。
圧縮したままで中身を確認することができます。
[root@server xzgrep]# less -F test.txt.bz2
111
abc
gzファイルの中身を確認してみます。
圧縮したままで中身を確認することができます。
[root@server xzgrep]# less -F test.txt.gz
111
abc
lzmaファイルの中身を確認してみます。
圧縮したままで中身を確認することができます。
[root@server xzgrep]# less -F test.txt.lzma
111
abc
lzoファイルは、lessコマンドではそのままでは中身を確認できないようです。
[root@server xzgrep]# less -F test.txt.lzo
"test.txt.lzo" may be a binary file. See it anyway?
xzファイルの中身を確認してみます。
圧縮したままで中身を確認することができます。
[root@server xzgrep]# less -F test.txt.xz
111
abc
5 マッチした前後の行を表示する方法(-C
)
圧縮ファイルを検索してマッチした行と、その前後の行を表示してみます。
[root@server xzgrep]# seq 1 10 > test.txt
[root@server xzgrep]# cat test.txt
1
2
3
4
5
6
7
8
9
10
[root@server xzgrep]# xz -k test.txt
[root@server xzgrep]# ls -l
合計 8
-rw-r--r--. 1 root root 21 4月 21 20:07 test.txt
-rw-r--r--. 1 root root 80 4月 21 20:07 test.txt.xz
圧縮ファイルの中から5
にマッチした行と、その前後の2行を表示してみます。
[root@server xzgrep]# xzgrep -C2 5 test.txt.xz
3
4
5
6
7