Unix-pipes-filters
Unix/Linux-パイプとフィルター
この章では、Unixのパイプとフィルターについて詳しく説明します。 1つのプログラムからの出力が次のプログラムの入力になるように、2つのコマンドを一緒に接続できます。 この方法で接続された2つ以上のコマンドはパイプを形成します。
パイプを作成するには、2つのコマンド間のコマンドラインに垂直バー(*| *)を配置します。
プログラムが別のプログラムから入力を受け取ると、その入力に対して何らかの操作を実行し、結果を標準出力に書き込みます。 filter と呼ばれます。
grepコマンド
grepコマンドは、特定のパターンを持つ行のファイルを検索します。 構文は-
$grep pattern file(s)
*"grep"* という名前は、ed(Unix行エディタ)コマンド *g/re/p* に由来します。これは、「正規表現をグローバルに検索し、それを含むすべての行を出力する」ことを意味します。
正規表現は、いくつかのプレーンテキスト(たとえば、単語)またはパターンマッチングに使用される特殊文字のいずれかです。
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* コマンドとともに使用できるさまざまなオプションがあります-
Sr.No. | Option & Description |
---|---|
1 |
-v パターンに一致しないすべての行を印刷します。 |
2 |
-n 一致した行とその行番号を出力します。 |
3 |
-l 一致する行(文字「l」)を持つファイルの名前のみを出力します |
4 |
-c 一致する行の数のみを出力します。 |
5 |
-i 大文字または小文字に一致します。 |
ここで、正規表現を使用して、grepに "キャロル" が付いた行を見つけ、その後に正規表現では "。*"と略されるゼロまたは他の文字が続き、その後に "Aug"が続くようにします。
ここでは、大文字と小文字を区別しない検索を行うために - i オプションを使用しています-
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
sortコマンド
*sort* コマンドは、テキストの行をアルファベット順または数値順に並べます。 次の例では、食品ファイル内の行をソートします-
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
*sort* コマンドは、デフォルトでテキストの行をアルファベット順に並べます。 並べ替えを制御する多くのオプションがあります-
Sr.No. | Description |
---|---|
1 |
-n 数値順にソートし(例:10は2の後にソートします)、空白とタブを無視します。 |
2 |
-r ソート順を逆にします。 |
3 |
-f 大文字と小文字を一緒にソートします。 |
4 |
PLUSx ソート時に最初の x フィールドを無視します。 |
3つ以上のコマンドをパイプにリンクできます。 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 コマンドを使用したりすると、画面がテキストでいっぱいになると、表示が停止します。
長いディレクトリリストがあると仮定しましょう。 ソートされたリストを読みやすくするために、次のように出力を more にパイプします-
$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 プロンプトでは、コマンドを入力して、ソートされたテキストを移動できます。
この画面での作業が完了したら、moreプログラムの説明にリストされているコマンドのいずれかを使用できます。