文字列一致ではなく、ファイル一致に正規表現を使用します。

文字列一致ではなく、ファイル一致に正規表現を使用します。

grep以下を使用して特定の文字列を検索する方法を理解しよ"9"うとしています。b

試してみましたgrep -e "9" bが、ファイルが見つかりませんでしたb。 (該当するオプションを使用しない場合も同様です-e。)

私はそれができることを知っていますが、grep -e "9" *b*それは私の焦点では​​ありません。正規表現の一般的なツールを使用してファイル名の一致を実行したいと思います。

私はこれを得るための複雑な方法には興味がありません。grepこの目的のための簡単なオプションがあればと思います。最後まで読みましたmanが、役に立つものが見つかりませんでした。しかし、シェルスクリプトが初めてなので簡単に見逃すことができました。

ファイル名の一致に正規表現を使用できますか?ただ grep?それでは、どうすればいいですか?

答え1

grepデフォルトでは、正規表現を使用してファイルを照合するオプションはありません。

2つのオプションがあります。

  1. たとえば、シェルグローブを使用します。

    grep -e '9' b*
    

    上記の例は非常に単純な例ですが、特にいくつかの拡張メカニズムを使用している場合は、非常にユニークなファイル名を一致させることができます。以下にはbash、有効にできるいくつかの便利な機能がリストされています。同様の機能はzsh他のシェルでも見つけることができます。

    • globstar**ディレクトリツリー全体を一致させるため)
    • nocaseglob(大文字と小文字を区別しない一致)
    • extglob(拡張モード:?()、、、、、、)@()!()*()+()
    • nullglob(一致しないパターンは空の文字列に展開されます。)
  2. findファイルを検索して実行するために使用されますgrep

    find . -name 'b*' -exec grep '9' {} +
    

    または正規表現が必要な場合:

    find . -regex './b.*' -exec grep '9' {} +
    

    このアプローチの利点は、別のスイッチを追加して、find名前だけでなく日付、サイズなどに基づいてファイルを選択できることです。これは、標準シェルのglobzsh機能を使用しない限り実行できません。グローバル予選

関連情報