IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第5回 パイプを使ってみよう (宮崎悟) 2019年3月

前回は、標準入出力とリダイレクトについて述べました。 Ubuntuを始めとするLinuxおよびUNIX like OSで、標準入出力は重要なことは前回述べたとおりですが、今回はコマンド同士を連携するために使用するパイプについて述べようと思います。

パイプ

パイプとは、その名の通り標準出力からの出力を標準入力に入力する機能です。

例えば、ls -lR(ディレクトリを再帰的に検索) やfindの出力結果は、ファイル数が多いと見るのが大変ですが、パイプともにlessを使用することで楽にすべてを見ることが可能です。

$ find . -type f |less
./ar/admindbdetails.html
./ar/admindbpreamble.html
./ar/admindbsummary.html
./ar/adminsubscribeack.txt
./ar/adminunsubscribeack.txt
./ar/admlogin.html
./ar/approve.txt
./ar/archidxentry.html
./ar/archidxfoot.html
./ar/archidxhead.html
./ar/archlistend.html
./ar/archliststart.html
./ar/archtoc.html
./ar/archtocentry.html
./ar/archtocnombox.html
./ar/article.html
./ar/bounce.txt
./ar/checkdbs.txt
./ar/convert.txt
./ar/cronpass.txt
./ar/disabled.txt
./ar/emptyarchive.html
./ar/headfoot.html
./ar/help.txt
./ar/invite.txt
./ar/listinfo.html
./ar/masthead.txt
./ar/newlist.txt
./ar/nomoretoday.txt
./ar/options.html
./ar/postack.txt
:

lessはPAGERと呼ばれるプログラムで、標準入力の内容や指定したファイルの内容を読み込み、端末のサイズ分の内容を前方や後方に移動して表示させたり、検索する機能を持っています。man コマンドなどでは標準的に使用されます。

その他にも、ファイル先頭・後方を表示するhead/tail コマンドもパイプと共によく使用されます。以下のコマンドでは、find の結果の先頭20行目から30行目を表示するために、headとtailを使用しています。この様に、パイプは多段で使用することも可能です。

$ find . -type f | head -30 | tail
./ar/disabled.txt
./ar/emptyarchive.html
./ar/headfoot.html
./ar/help.txt
./ar/invite.txt
./ar/listinfo.html
./ar/masthead.txt
./ar/newlist.txt
./ar/nomoretoday.txt
./ar/options.html
標準エラー出力をパイプに渡す

標準エラー出力をパイプに渡すには、すこし工夫が必要です。コマンドに「 2>&1」 を追記することで、標準エラー出力を標準出力とともに出力することが出来ます。以下のコマンドでは、エラー結果を含めてファイルに結果を出力しています。

$ cat a b c d e f g 2>&1 | grep -v b > file
$ cat file
a
c
cat: d: そのようなファイルやディレクトリはありません
cat: e: そのようなファイルやディレクトリはありません
cat: f: そのようなファイルやディレクトリはありません
cat: g: そのようなファイルやディレクトリはありません

エラー行のみが欲しい場合は以下のようにします。

$ ( cat a b c d e f g > /dev/null ) 2>&1 | grep -v b
cat: d: そのようなファイルやディレクトリはありません
cat: e: そのようなファイルやディレクトリはありません
cat: f: そのようなファイルやディレクトリはありません
cat: g: そのようなファイルやディレクトリはありません

/dev/null は特殊なデバイスファイルで、入力したものをすべて捨て、何も出力しないファイルになります。

grep - パターンにマッチする行を表示する

上記で使用したgrepコマンドですが、指定したパターンにマッチさせるというコマンドです。

以下のように、いくつかのオプションがあります。

オプション 説明
-E パターンを拡張正規表現(ERE)として扱う
-F パターンをただの文字列として扱う
-G パターンを基本正規表現(BRE)として扱う(無指定時は-G)
-P パターンをperl互換正規表現(PCRE)としていて扱う
-e パターンを指定する。-e をフクスウ使用することで、複数パターンを指定できる
-f ファイル 指定ファイルからパターンを取得する
-i 大文字小文字を区別しない
-v パターンに一致しない行を表示
-w ワードが完全マッチした行を表示
-x パターンが行全体とマッチした行を表示
-q 一致した行があれば終了する
-n 行数と共に出力する

grepは、ただの文字列としてマッチした行を表示するのに使用しますが、それ以外にも正規表現を使用してマッチした行を表示することも可能です。

次回では、この正規表現について説明しようと思います。次回もお楽しみにお待ち下さい。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes