grepコマンドの本質は何ですか?

grepコマンドの本質は何ですか?

ワイルドカード "*"を使用してすべての.txtファイルをgrepしたいと思います。
このコマンドを試しましたが(引用符 ""なしで)失敗しました。

ls | grep "*.txt"

興味深いことに、ディレクトリの.txtファイルに対応するgrepコマンドに別の文字を入れると機能します。

>>ls | grep s*.txt
sample.txt

私はこれがうまくいくls *.txtことを知っていましたが、grepコマンドの特性に少し驚きました。なぜこれが起こるのを助けることができる人がいますか?

grepが正規表現を使用するためですか?助けてください。

ベストアンサー1

正規表現では、*シェルモードのように「任意の文字数」ではなく、「前の項目の数」を意味します。 「すべての単一文字」を意味します.。したがって、「テキストに続くすべてのもの.txt」を見つけるには.*\.txt\.txtその後、最後に来る必要はないので、同様の\.txtファイル名も一致します。パターンを行末までロックする必要があります。foo.txtgz.txt\.txt$

正規表現は、*.txt実装とデフォルトの正規表現(grep)または拡張正規表現(grep -E)を使用しているかどうかに応じて、意味がないか、間違っているか、文字通りアスタリスクを探します。使用しないことをお勧めします。

一方、「文字数、単一文字、リテラル」s*.txtを探します。これはより効率的な正規表現ですが...まだ一致しません。stxtsample.txt

代わりに、2番目のコマンドでは引用されていないため、s*.txtシェルはそれを見る前にs*.txt拡張します。grep一致する唯一のファイルがある場合は、その出力でsample.txtそのgrepファイルを見つけますls。 (一致するファイル名が複数ある場合、最初のファイルはパターンとして扱われ、残りはファイル名として読み込まれますgrep。この場合、パイプの入力は無視されます。)


ただし、lsファイルのリストを取得することも可能なので、次のものを使用できます。

ls | grep '\.txt'

ファイルを入手するには.txt使いやすくなります。

ls *.txt 

代わりに。

おすすめ記事