GNU/Linux >> Linux の 問題 >  >> Linux

正規表現は、ファイルのフィルタリングに使用されるワイルドカードとどのように異なりますか?

*を使用している間 grepの0個以上の前の文字を示す 、*。cを使用します lsで使用するときにすべてのCファイルを検索する ls * .cのようなコマンド 。誰かが*の使用方法を教えてもらえますか これら2つの場合で違いますか?

承認された回答:

シェルファイル名のグロブと正規表現は同じ文字のいくつかを使用し、それらは同様の目的を持っていますが、あなたは正しいです、それらは互換性がありません。ファイル名のグロブは、それほど強力なシステムではありません。

ファイル名のグロビング:

  • * 「0個以上の文字」を意味します

  • 「任意の1文字」を意味します

ただし、正規表現では、。*を使用する必要があります 「0個以上の文字」を意味し、 「任意の1文字」を意味します。 正規表現でまったく異なる何かを意味します:先行するRE要素のゼロまたは1つのインスタンス。

角かっこ( [] )少なくとも単純なケースでは、これを入力しているシステムの両方のシステムで同じように機能するようです。これには、POSIX文字クラス(例: [:alpha:] )などが含まれます )。とはいえ、コマンドをさまざまな種類のシステムで機能させる必要がある場合は、文字のリストなどの基本的なもの以外のものを使用しないことをお勧めします(例: [abeq] )および多分文字範囲(例: [a-c]

これらの違いは、2つのシステムが単純な場合にのみ直接交換可能であることを意味します。ファイル名の正規表現マッチングが必要な場合は、別の方法で行う必要があります。 find -regex 1つのオプションです。 ( find -nameもあることに注意してください ちなみに、これはglob構文を使用します。)


Linux
  1. Awkおよび正規表現を使用してファイル内のテキストまたは文字列をフィルタリングする方法

  2. LinuxでRPMまたはDEBパッケージからインストールされたファイルを一覧表示する方法

  3. LinuxでPDFファイルからビデオを作成する方法

  1. Linuxでテキストファイルからバイナリを見分ける方法

  2. dockerfile からホストにファイルをコピーする方法は?

  3. すべてのファイルを現在のディレクトリから上位ディレクトリに移動する方法は?

  1. Pythonスクリプトを使用してSFTPサーバーからファイルをダウンロードする方法

  2. 正規表現を使用して TAR アーカイブからファイルを除外する方法は?

  3. ファイル名から無効な文字を削除するには?