Linux の学習 [17] bash の詳細な学習 3 --- ワイルドカードと特殊記号 --- データ フローのリダイレクト

序文

このブログは、以前の検索に含まれていたいくつかのワイルドカード文字 (bash のワイルドカード) をまとめたものです。これは、後のパイプライン関連作業の基礎となります。


1.ワイルドキャラクター

以下に表を示し、その後に関連する例を示します。

シンボル 意味
* 「0から無限まで」の任意の文字を表します
「1 つ存在する必要がある」任意の文字を表します
[ ] これは、「括弧内に 1 文字がなければならない」(任意の文字ではない) ことも意味します。たとえば、[abcd] は「a、b、c、d のいずれかの文字が 1 つ必要です」を意味します。
[ - ] 角括弧内にマイナス記号がある場合は、「エンコード シーケンス内のすべての文字」を意味します。たとえば、数値の言語エンコードは連続的であるため、[0-9] は 0 から 9 までのすべての数値を表します。
[ ^ ] 角括弧内の最初の文字が指数記号 (^) の場合、「逆選択」を意味します。たとえば、[^abc] は 1 文字でなければならず、a、b、c 以外の文字はすべて選択されることを意味します。受け入れられました。

例:ディレクトリを例に
挙げると、cd で /etc ディレクトリに移動すると、ls で多数のファイルが表示され、一部のファイル接頭辞が重複していることがわかります。上の写真にすべてが載っているわけではなく、以下にたくさんの資料があります。/etc

ここに画像の説明を挿入します

例1:h で始まるファイルを表しls h*、h の後に 0/無限の文字が続くファイルはすべて機能します。
ここでは、hp ディレクトリ内に h で始まるいくつかのファイルと hp で始まるファイルがリストされていることがわかります。これらはすべて h で始まるファイルの要件を満たしていますが、Ubuntu はそれらをカテゴリに分類し、異なるファイルが現在のディレクトリにあるか、その下のサブディレクトリにあるかを示します。
ここに画像の説明を挿入します

例2:ここで、host で始まるものを見つける必要があります。host の後に 1 文字が必要です。
命令:ls host?

ここに画像の説明を挿入します

ここに画像の説明を挿入します
host で始まる名前はたくさんありますが、host の後ろに 1 文字しかないものは hosts ファイルのみなので、当然ls host?検索結果も hosts ファイルのみになります。

例3:ここで、h で始まるファイルを検索します。h の後に文字ファイルが存在する必要があります。
ls を実行すると、/etc ディレクトリに hp サブディレクトリがあることがわかります。
ここに画像の説明を挿入します
これを使用するとls h?、hp ディレクトリは表示されず、hp 内のファイルが直接表示されます。これは例 2 とは少し異なるため、注目に値します。
ここに画像の説明を挿入します

例4:/etc ディレクトリ内の、3 文字 [wzy] のいずれかで始まり、その後の文字に制限がないファイルをリストします。
手順: ls [wzy]*
ここに画像の説明を挿入します
例5:/etc ディレクトリー内の、文字 x->z で始まり、以降の文字に制限がないファイルをリストします。
ディレクトリの場合は、対応するディレクトリ内のすべてのファイルがリストされます。
手順:ls [x-z]*
ここに画像の説明を挿入します
例6:例 5 と同じ効果ですが、逆サンプリング モードです。
説明:ls [^a-w]*
これは、a->w を除く他の文字で始まるファイルをリストすることを意味します。a->w を除き、xyz で始まることを意味するため、効果は上記の例 5 と同じです。

ここに画像の説明を挿入します

2. 特殊文字

上記のワイルドカード文字に加えて、bash には多くの特殊文字もあります。
簡単に参照できるように、表を以下に示します。

シンボル コンテンツ
# 注釈記号: これはスクリプトで最も一般的に使用され、説明とみなされます。以下のデータは実行されません
\ エスケープ記号: 「特殊文字またはワイルドカード」を通常の文字に戻す
| パイプライン: 2 つのパイプライン コマンドを分離する定義 (次の 2 つのセクションで説明します)。
; 連続コマンド発行区切り記号:連続コマンドの定義(パイプラインコマンドとは異なりますので注意)
ユーザーのホームフォルダー
$ 変数のプレフィックス文字、つまり、変数の前に追加する必要がある変数置換値を取得します。
& ジョブ制御: 指示をバックグラウンドで作業に変える
論理演算の意味での「not」は、そうでないことを意味します。
/ ディレクトリシンボル: パスで区切られたシンボル
>、>> データフローのリダイレクト: 出力方向、つまり「置換」と「蓄積」
<、< データ フロー リダイレクト: 入力方向 (これら 2 つは次のセクションで紹介します)
「」 シングルクォーテーションには変数置換の機能はありません($はプレーンテキストになります)
「」 変数置換機能あり!($は関連する関数を保持できます)
「」 2 つの ` の真ん中は最初に実行できる命令です。$ ( ) も使用できます。
( ) 中央にはサブシェルの開始点と終了点があります。
{ } 真ん中はコマンドブロックの組み合わせ!

3. データフローのリダイレクト

3.1 標準出力

この言葉を聞くととても高級感がありますが、簡単に言うと自分がアウトプットしたものを別の場所に保管するという意味です。
たとえば、lsコマンドを使用して現在のディレクトリ内のすべてのファイルを表示すると、コンソールはそれをコンソール インターフェイスに直接出力します。
たとえば、最初に作成したファイルに出力コンテンツをインポートする場合は、/home/edwinwzy/LearnOfLinuxディレクトリに空のファイルを作成しdatatreディレクトリ内の ls コマンドによって出力されたコンテンツを datatre に保存したいとします
/etcls >/home/edwinwzy/LearnOfLinux/datatre

ここで datatre ファイルを作成する必要はありません。コマンドを使用するときに、そのようなファイルが存在しない場合、システムが自動的にデータを作成し、データをファイルに保存します。
下の図の左側が命令で、右側がファイル内のデータです。

ここに画像の説明を挿入します

以上がデータフローリダイレクションの従来の応用例であり、以下では書籍の内容に基づいてデータフローリダイレクションについて詳しく紹介します。

命令を実行すると、命令はファイルからデータを読み取り、処理して、データを画面に出力します。通常、データ情報には標準出力とエラー出力があり、標準出力と標準エラー出力はそれぞれ「標準出力(STDOUT)」と「標準エラー出力(STDERR)」を表しており、デフォルトではこの2つが画面に出力されます。標準出力は「コマンドの実行によって返される正しいメッセージ」を指しますが、標準エラー出力は「コマンドの実行が失敗した後に返されるエラー メッセージ」として理解できます。

たとえば、habcd で始まるファイルを表示するために ls を使用しますが、実際には /etc ディレクトリにそのようなファイルはありません。このとき、ファイルが存在しないことを示すプロンプトが表示され、これが標準エラー出力です。逆に、コマンドの条件を象徴するファイルが存在する場合は、そのファイルが表示され、このファイルの表示が標準出力となります。

標準入力 (stdin): コードは 0、< または << を使用します;
標準出力 (stdout): コードは 1、> または >> を使用します;
標準エラー出力 (stderr): コードは 2、2> または 2>> を使用します;

このセクションの冒頭で使用法を示しましたが、> と >> の違いとその使用方法については以下で説明します。
>デフォルトは標準エラーではなく標準出力です。

1>: 指定したファイルまたはデバイスに「正しいデータ」を上書き出力
; 1>>: 指定したファイルまたはデバイスに「正しいデータ」を蓄積出力;
2>: 上書き このメソッドは、「間違ったデータ」を上書き出力します。指定されたファイルまたはデバイス;
2>>: 蓄積方法により、指定されたファイルまたはデバイスに「間違ったデータ」が出力されます。

複数の命令の出力を同じファイルに入れたい場合は、蓄積とカバレージが関係しますが、使用方法は上にリストされていますが、使用方法は比較的単純なので、ここでは説明しません。

下面还有几个用法:

エラー メッセージが表示されることがわかっているので、表示または保存せずに無視したい場合はどうすればよいですか? この時、ブラックホール装備は /dev/null非常に重要です!この /dev/null は、このデバイスに送信されるあらゆる情報を読み取ることができます。

1. 間違ったデータを破棄し、正しいデータを画面に表示します

find /home -name .bashrc 2> /dev/null

2. 正しいデータと誤ったデータの両方がファイルに保存されます。

find /home -name .bashrc > list 2> list -------错误写法

find /home -name .bashrc > list 2>&1 -----正确写法

なぜ間違った書き方が間違っているのでしょうか?確かに正しいデータと誤ったデータを統合して格納できますが、2 つのデータ ストリームが同時に 1 つのファイルに書き込まれ、特別な構文が使用されないため、2 つのデータ ストリームがインターリーブされてファイルに書き込まれる可能性があります。秩序が乱れる原因となります。したがって、最終的にリスト ファイルは生成されますが、その中のデータの配置は、元の出力が画面上で並べ替えられるのではなく、奇妙なものになります。

3.2 標準入力

上に書かれているのは、命令を通じてデータを出力し、そのデータをファイルに保存することです。
標準入力はその逆の処理で、元々コンソールから入力されたデータがファイルから読み取られたデータになります。

例を挙げて説明するとわかりやすいはずです。
私はカレントディレクトリに保存していますcat >dataが、データファイルが無い場合は自動で作成されますので、「123456」と入力してctrl+cを押してください。
このとき、dataという名前のテキストが123456個含まれたファイルが作成されます。
ここに画像の説明を挿入します

ここでDATAファイルを作成したいと思います。内部のデータコンテンツはdataのデータです。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

上記の例は単なるデモンストレーションであり、実際の適用にはさらなる練習が必要です。


要約する

このブログでは、汎用文字と特殊記号を整理し、前者の使用例を示し、データ フローのリダイレクトについて詳しく説明し、その後のパイプラインやその他のトピックの学習の基礎を築きます。

おすすめ

転載: blog.csdn.net/Edwinwzy/article/details/131314911