ウェブサイト検索

Linux で効果的なファイル操作を行うためにテキストをフィルタリングするための 12 の便利なコマンド


この記事では、Linux でフィルターとして機能するいくつかのコマンド ライン ツールを確認します。 フィルタは、標準入力を読み取り、それに対して演算を実行し、結果を標準出力に書き込むプログラムです。

このため、出力を再構築して有用なレポートを生成したり、ファイル内のテキストを変更したり、その他多くのシステム管理タスクを実行したりするなど、強力な方法で情報を処理するために使用できます。

そうは言っても、以下は Linux の便利なファイル フィルターまたはテキスト フィルターの一部です。

1.awkコマンド

Awk は優れたパターン スキャンおよび処理言語であり、Linux で便利なフィルターを構築するために使用できます。 Awk シリーズのパート 1 からパート 13 までを読むことで、使用を開始できます。

さらに、詳細情報と使用オプションについては、awk のマニュアル ページもお読みください。

man awk

2.Sedコマンド

sed は、テキストのフィルタリングと変換を行うための強力なストリーム エディタです。 sed についてはすでに 2 つの有益な記事を書いていますので、ここで参照してください。

  1. GNU「sed」コマンドを使用して Linux でファイルを作成、編集、操作する方法
  2. 日常の Linux システム管理タスクに役立つ「sed」コマンドの 15 のヒントとテクニック

sed のマニュアル ページには、制御オプションと手順が追加されています。

man sed

3. Grep、Egrep、Fgrep、Rgrep コマンド

これらのフィルターは、指定されたパターンに一致する行を出力します。ファイルまたは標準入力から行を読み取り、デフォルトで一致するすべての行を標準出力に出力します。

: メイン プログラムは grep です。そのバリエーションは、以下に示す特定の grep オプションを使用するのと同じです (下位互換性のために引き続き使用されています)。

egrep = grep -E
fgrep = grep -F
rgrep = grep -r  

以下にいくつかの基本的な grep コマンドを示します。

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Linux における Grep、Egrep、Fgrep の違いについて詳しくは、「Linux における Grep、Egrep、Fgrep の違い」をご覧ください。

4.headコマンド

head はファイルの最初の部分を表示するために使用され、デフォルトでは最初の 10 行が出力されます。 -n num フラグを使用して、表示する行数を指定できます。

tecmint@TecMint ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Linux で効果的に使用するために、head コマンドと tail コマンドおよび cat コマンドを併用する方法を学びます。

5.tailコマンド

tail は、ファイルの最後の部分 ( デフォルトでは 10 行) を出力します。 -n num スイッチを使用して、表示する行数を指定します。

以下のコマンドは、指定されたファイルの最後の 5 行を出力します。

tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

さらに、tail には、ファイル (特にログ ファイル) の変更をリアルタイムで監視するための特別なオプション -f があります。

次のコマンドを使用すると、指定したファイルの変更を監視できます。

tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

使用オプションと手順の完全なリストについては、末尾のマニュアル ページを読んでください。

man tail

6.sortコマンド

sort は、テキスト ファイルまたは標準入力の行を並べ替えるのに使用されます。

以下は、domains.list という名前のファイルの内容です。

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

次のように単純な sort コマンドを実行して、ファイルの内容を並べ替えることができます。

tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

sort コマンドはさまざまな方法で使用できます。次のように、sort コマンドに関する役立つ記事をいくつか読んでください。

  1. Linux の「sort」コマンドの 14 の役立つ例 – パート 1
  2. 7 つの興味深い Linux 「sort」コマンドの例 – パート 2
  3. 変更日時に基づいてファイルを検索および並べ替える方法
  4. 「ls」コマンドの出力を最終変更日時で並べ替える方法

7.uniqコマンド

uniq コマンドは、繰り返される行をレポートまたは省略するために使用され、標準入力から行をフィルタリングし、結果を標準出力に書き込みます。

入力ストリームで sort を実行した後、以下の例のように uniq を使用して繰り返し行を削除できます。

行の出現数を示すには、 -c オプションを使用し、 -i オプションを含めることで比較中に大文字と小文字の違いを無視します。

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

詳しい使用方法とフラグについては、uniq のマニュアル ページを読んでください。

man uniq

8. fmtコマンド

fmt シンプルで最適なテキスト フォーマッタ。指定されたファイル内の段落を再フォーマットし、結果を標準出力に出力します。

以下は、ファイル domain-list.txt から抽出されたコンテンツです。

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

上記のコンテンツを標準リストに再フォーマットするには、最大線幅の定義に使用される -w スイッチを使用して次のコマンドを実行します。

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9.prコマンド

pr コマンドは、テキスト ファイルまたは標準入力を印刷用に変換します。たとえばDebian システムでは、次のようにインストールされているすべてのパッケージを一覧表示できます。

dpkg -l

印刷できるようにリストをページと列に整理するには、次のコマンドを発行します。

tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

ここで使用されるフラグは次のとおりです。

  1. --column は、出力内に作成される列の数を定義します。
  2. -l はページの長さを指定します (デフォルトは 66 行)。

10.trコマンド

このツールは、標準入力から文字を変換または削除し、結果を標準出力に書き込みます。

tr を使用するための構文は次のとおりです。

tr options set1 set2

以下の例を見てください。最初のコマンドでは、set1( [:upper:] ) が入力文字の大文字と小文字 (すべて大文字) を表しています。

set2([: lower:]) は、結果の文字がどのような場合になるかを表します。 2 番目の例でも同じで、エスケープ シーケンス \n は出力を新しい行に出力することを意味します。

tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. 詳細コマンド

more コマンドは、基本的に証明書の表示のために作成された便利なファイル閲覧フィルタです。ファイルの内容がページのような形式で表示され、ユーザーは [Enter] を押して詳細情報を表示できます。

これを使用して、次のように大きなファイルを表示できます。

tecmint@TecMint ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12.lessコマンド

less は上記の more コマンドの逆ですが、追加の機能が提供され、大きなファイルの場合は少し高速になります。

more と同じように使用します。

tecmint@TecMint ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

Linux で効果的なファイル ナビゲーションを行うためのコマンド「less」が「more」よりも速い理由を学びましょう。

今のところはこれですべてです。ここで言及されていない便利なコマンド ライン ツールがあれば、以下のコメント セクションを介して Linux でテキスト フィルターとして機能するものをお知らせください。