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

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------


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


この章では、Unixのパイプとフィルタについて詳しく説明します。あるプログラムからの出力が次のプログラムの入力となるように、2つのコマンドを一緒に接続することができます。

このように接続された2つ以上のコマンドを使う場合パイプ ( | ) を使います

パイプを作成するには、コマンドラインに2つのコマンドの間に縦線( | )を付けます。

プログラムが別のプログラムから入力を受け取ると、その入力に対して何らかの操作を実行し、その結果を標準出力に書き込むことができます。

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コマンドと一緒に使用できるさまざまなオプションがあります。

S.No. オプションと説明
1 -v

patternと一致しないすべての行を出力します。

2 -n

一致した行とその行番号を出力します。

3 -l

一致する行(文字 “l”)のファイル名のみを出力します。

4 -c

一致する行の数だけを出力します。

5 -私

大文字または小文字のいずれかに一致します。

grepに“carol”という行とそれに続く正規表現で “。*”と略記されたゼロまたはその他の文字が続いて “Aug”が続く行を見つける正規表現を使用しましょう。

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

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

sortコマンド


ソートコマンドは、アルファベット順または数値的にテキストの行を配置します。次の例では、フードファイルの行をソートします。

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

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

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

S.No. 説明
1 -n

数値でソートします(例:10は2より後にソートされます)。空白とタブは無視されます。

2 -r

並べ替えの順序を逆にします。

3 -f

大文字と小文字を並べ替えます。

4 + x

並べ替えるときに最初のxフィールドを無視します。

わかりずらいので以下のように並べ替えて見ましょう。

以下のパイプは、コマンドのから成りLSgrepを、およびソート - を行なっている状態です

$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とmoreコマンド


通常、長い出力は画面上で圧縮されますが、moreを介してテキストを実行するか、または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%)

画面には、ファイルサイズの順にソートされた行で構成されるテキストがいっぱいになると、画面がいっぱいになります。画面の下部には、よりプロンプトが表示されます。ここで、ソートされたテキストを移動するコマンドを入力できます。

この画面が終了したら、詳細プログラムの説明に記載されているコマンドを使用できます。

次のページ

前のページ

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。