パターンマッチングのためのgrep

パターンマッチングのためのgrep

スクリプトファイルから別のファイルにパターンを読み取るのに問題があります。デフォルトでは、あるファイルの出力は別のスクリプトファイルの入力として使用する必要があります。 maze_gen の出力は # と空白記号の配列です。例 5 下の 7 は出力の高さと幅を示しています。

if [`./maze_gen 5 7 | grep -E "[^# ]"` ]; then
        echo no
else 
        echo yes
fi

maze_gen一連のスペースを生成するファイルです# 。これは現在作業中の入力ファイルとして受け取ります。私のコードに問題があります。入力に# 文字しかないことを確認できません。

答え1

テストしたい出力に./maze_gen 5 7スペースやハッシュ以外の文字が含まれているようです。

以下を使用すると、これをより効率的に実行できます。

if ./maze_gen 5 7 | grep -q '[^ #]'
then
    echo no
else
    echo yes
fi

実際にはそうではありません。タブレット式に一致する行です。代わりgrep -qに、パターンが一致するとすぐに終了し、終了ステータスgrepはステートメントで使用するif分岐(echo noまたはecho yes)を決定するために使用されます。

パターンが一致すると、ユーティリティは入力処理を停止し、シェルが文字列比較テストに使用するgrepために出力を保存する必要がないため、これはユーザーが試したよりも効率的です。grep

コードに構文エラーがあるため、コードは実行されません。[周囲にスペースが必要です。

さらに、-E一部の実装は拡張正規表現を有効にするために使用できますgrep。あなたの場合、式はデフォルトの正規表現なので、これを行う必要はありません。

関連情報