フィルタ
フィルタは、パイプリダイレクトと出力を変更するコマンドです。filterコマンドは、パイプなしで使用できる標準のLinuxコマンドでもあることに注意してください。
- find – findは、渡された引数に一致するファイル名のファイルを返します。
- grep – grepは、grepに渡された文字列パターンに一致するテキストを返します。
- tee – 標準入力を標準出力と1つ以上のファイルの両方にリダイレクトします。
- tr – trはある文字列を別の文字列と置き換えます。
- wc – wcは文字、行、単語を数えます。
例
リダイレクション、配管、基本フィルタについて紹介しましたので、いくつかの基本的なリダイレクトのパターンと例を見ていきましょう。
コマンド>ファイル
このパターンは、コマンドの標準出力をファイルにリダイレクトします。
ls ~ > root_dir_contents.txt
上記のコマンドは、システムのルートディレクトリの内容を標準出力として渡し、出力をroot dircontents.txt という名前のファイルに書き込みます。これは単一ブラケットコマンドであるため、ファイル内の以前の内容はすべて削除されます。
コマンド> / dev / null
/ dev / nullは、リダイレクトされたすべてのデータをゴミ箱にコピーするために使用される特別なファイルです。これは、不要な標準出力を破棄するために使用され、コマンドやスクリプトの機能を妨げる可能性があります。/ dev / nullに送信される出力は破棄されます。
将来、シェルスクリプトの作成時に標準出力と標準エラーを/ dev / nullにリダイレクトする方法があるかもしれません。
ls > /dev/null
このコマンドは、コマンドlsから返された標準出力ストリームを/ dev / nullに渡すことによってそのストリームを破棄します。
コマンド2>ファイル
このパターンは、コマンドの標準エラーストリームをファイルにリダイレクトし、既存の内容を上書きします。
mkdir '' 2> mkdir_log.txt
これにより、無効なディレクトリ名”によって生成されたエラーがリダイレクトされ、log.txtに書き込まれます。エラーは引き続き端末に送信され、テキストとして表示されます。
コマンド>>ファイル
このパターンは、ファイルの既存の内容を上書きすることなく、コマンドの標準出力をファイルにリダイレクトします。
echo Written to a new file > data.txt
echo Appended to an existing file's contents >> data.txt
このコマンドのペアは、エコーを介してユーザーが入力したテキストを最初に新しいファイルにリダイレクトします。次に、2番目のechoコマンドで受け取ったテキストを、その内容を上書きすることなく、既存のファイルに追加します。
コマンド2 >>ファイル
上記のパターンは、ファイルの既存の内容を上書きすることなく、コマンドの標準エラーストリームをファイルにリダイレクトします。このパターンは、プログラムまたはサービスのエラーログを作成する場合に便利です。ログファイルは、ファイルが書き込まれるたびに以前の内容が消去されないためです。
find '' 2> stderr_log.txt
wc '' 2>> stderr_log.txt
上記のコマンドは、無効なfind引数によって発生したエラーメッセージをstderr_log.txtという名前のファイルにリダイレクトします。次に、無効なwc引数によって引き起こされたエラーメッセージを同じファイルに追加します。
コマンド| コマンド
最初のコマンドの標準出力を2番目のコマンドの標準入力にリダイレクトします。
find /var lib | grep deb
このコマンドは、/ varとそのサブフォルダを検索して、ファイル名と拡張子がdebという文字列に一致するかどうかを調べ、ファイルのファイルパスを返します。各パスの一致部分は赤でハイライト表示されます。
コマンド| ティーファイル
このパターン(teeコマンドを含む)は、コマンドの標準出力をファイルにリダイレクトし、その内容を上書きします。次に、リダイレクトされた出力を端末に表示します。ファイルがまだ存在しない場合は、新しいファイルが作成されます。
このパターンのコンテキストでは、teeは通常、プログラムの出力をファイルに保存しながら同時に表示するために使用されます。
wc /etc/magic | tee magic_count.txt
これは、マジックファイル(Linuxシェルがファイルタイプを決定するために使用する)内の文字、行、単語の数をteeコマンドにパイプし、wcの出力を2方向に分割して端末ディスプレイに送信し、magic_count .txtファイル。teeコマンドの場合、文字Tを想像してください。文字の下の部分は最初のデータで、上の部分は2つの異なる方向(標準出力と端末)に分割されているデータです。
複数のパイプを使用して、複数のコマンドやフィルタに出力をリダイレクトすることができます。
コマンド| コマンド| コマンド>>ファイル
このパターンは、最初のコマンドの標準出力を先読みし、次の2つのコマンドでフィルタリングします。次に、最終結果をファイルに追加します。
ls ~ | grep *tar | tr e E >> ls_log.txt
これは、ルートディレクトリ(〜)でlsを実行し、結果をgrepコマンドにパイプすることで始まります。この場合、grepはファイル名または拡張子にtarを含むファイルのリストを返します。
grepの結果は、eに最初の引数(検索する文字列)として渡され、Eが2番目の引数として渡されるので、文字eの出現をEで置き換えるtrにパイプされます最初の引数の一致)。この最後の結果はls_log.txtファイルに追加されます(まだ存在しない場合は作成されます)。
コメント