Unix / Linux-パイプとフィルタ

この記事では、Unixのパイプとフィルタについて詳しく説明します。 2つのコマンドを接続して、1つのプログラムの出力が次のプログラムの入力になるようにすることができます。 このように接続された2つ以上のコマンドがパイプを生成します。

パイプを作成するには、2つのコマンド間のコマンドラインに垂直バー(|)を配置します。

プログラムが別のプログラムから入力を取得すると、その入力に対していくつかの操作を実行し、結果を標準出力に書き込みます。 これはフィルタと呼ばれます。

grepコマンド

grepコマンドは、1つまたは複数のファイル内の特定のパターンの行を検索します。 構文は以下のとおりです。

$grep pattern file(s)

grep」という名前は、ed(Unixラインエディタ)コマンドg / re / pに由来します。これは、「正規表現をグローバルに検索し、その正規表現を含むすべての行を出力する」ことを意味します。

正規表現は、プレーンテキスト(単語など)やパターンマッチング用の特殊文字にすることができます。

grepの最も簡単な使い方は、単一の単語で構成されるパターンを見つけることです。 パイプで使用して、特定の文字列を含む入力ファイルの行のみを標準出力に送信できます。 読み取るファイルの名前をgrepに指定しない場合、grepは標準入力を読み取ります。これは、すべてのフィルタプログラムの機能です。

$ls -l | grep "Aug"
-rw-rw-rw-   1 john  doc     11008 Aug  6 14:10 ch02
-rw-rw-rw-   1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--   1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

grepコマンドでさまざまなオプションを使用できます。

番号オプションと説明
1-v
パターンに一致しないすべての行を印刷します。
2-n
一致した行とその行番号を印刷します。
3-l
行が一致するファイル名のみを印刷します。(文字「l」)
4-c
一致する行数のみを印刷します。
5-i
大文字または小文字に一致します。

次には、正規表現を使用して、正規表現で「carol」の後にゼロまたは「。*」と省略された他の文字が続き、次に「Aug」が続く行を検索するようにgrepに指示します。

ここでは、-iオプションを使用し、大文字と小文字を区別しないように、検索します。

$ls -l | grep -i "carol.*aug"
-rw-rw-r--   1 carol doc      1605 Aug 23 07:35 macros
$

sortコマンド

この型のテキストコマンドラインは、文字または数字で配置されます。 次の例では、foodファイルの行を並べ替えます。

$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java

Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$

デフォルトでは、sortコマンドはテキストの行をアルファベット順にソートします。 並べ替えを制御するための多くのオプションがあります。

番号説明
1-n
スペースとタブを無視して、番号をソートします。(例えば、10は2の後に並べ替えられます)
2-r
並べ替え順を逆にします。
3-f
大文字と小文字は一緒にソートされます。
4+x
ソートする場合、最初のxフィールドを無視します。

1つのパイプで2つ以上のコマンドをリンクできます。 grepを使用した前のパイプの実例を挙げると、8月に変更されたファイルをサイズ順にソートできます。

以下のパイプは、lsコマンド、grepの内容、およびsortで構成されています。

$ls -l | grep "Aug" | sort +4n
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-rw-  1 john  doc     11008 Aug  6 14:10 ch02
$

このパイプは、8月に変更されたディレクトリ内のすべてのファイルをサイズ順に並べ替え、端末画面に出力します。 並べ替えオプション+ 4nは、4つのフィールドをスキップし(フィールドはスペースで区切られます)、行を番号の順に並べ替えます。

pgおよびその他のコマンド

通常、画面でより長い出力を圧縮できますが、より多くのコンテンツにテキストを実行するか、フィルタとしてpgコマンドを使用すると、画面にはテキストがいっぱいになると表示が停止します。

仮にディレクトリのリストが長いです。並べ替えられたリストを読みやすくするために、次のやり方でより多くのパイプを介して出力してください。

$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r--  1 carol doc      1605 Aug 23 07:35 macros
-rw-rw-r--  1 john  doc      2488 Aug 15 10:51 intro
-rw-rw-rw-  1 john  doc      8515 Aug  6 15:30 ch07
-rw-rw-r--  1 john  doc     14827 Aug  9 12:40 ch03
    .
    .
    .
-rw-rw-rw-  1 john  doc     16867 Aug  6 15:56 ch05
--More--(74%)

ファイルのサイズ順に並べ替えられた行で構成されるテキストが画面に表示されると、画面がいっぱいになります。 画面の下部にさらに多くのプロンプトが表示されます。コマンドを入力してから、ソートされたテキストの間に移動できます。

この画面を完了した後、moreプログラムの説明にリストされているコマンドを使用できます。

Share

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です