grep
以下を使用して特定の文字列を検索する方法を理解しよ"9"
うとしています。b
試してみましたgrep -e "9" b
が、ファイルが見つかりませんでしたb
。 (該当するオプションを使用しない場合も同様です-e
。)
私はそれができることを知っていますが、grep -e "9" *b*
それは私の焦点ではありません。正規表現の一般的なツールを使用してファイル名の一致を実行したいと思います。
私はこれを得るための複雑な方法には興味がありません。grep
この目的のための簡単なオプションがあればと思います。最後まで読みましたman
が、役に立つものが見つかりませんでした。しかし、シェルスクリプトが初めてなので簡単に見逃すことができました。
ファイル名の一致に正規表現を使用できますか?ただ grep
?それでは、どうすればいいですか?
答え1
grep
デフォルトでは、正規表現を使用してファイルを照合するオプションはありません。
2つのオプションがあります。
たとえば、シェルグローブを使用します。
grep -e '9' b*
上記の例は非常に単純な例ですが、特にいくつかの拡張メカニズムを使用している場合は、非常にユニークなファイル名を一致させることができます。以下には
bash
、有効にできるいくつかの便利な機能がリストされています。同様の機能はzsh
他のシェルでも見つけることができます。globstar
(**
ディレクトリツリー全体を一致させるため)nocaseglob
(大文字と小文字を区別しない一致)extglob
(拡張モード:?()
、、、、、、)@()
!()
*()
+()
nullglob
(一致しないパターンは空の文字列に展開されます。)
find
ファイルを検索して実行するために使用されますgrep
。find . -name 'b*' -exec grep '9' {} +
または正規表現が必要な場合:
find . -regex './b.*' -exec grep '9' {} +
このアプローチの利点は、別のスイッチを追加して、
find
名前だけでなく日付、サイズなどに基づいてファイルを選択できることです。これは、標準シェルのglobzsh
機能を使用しない限り実行できません。グローバル予選。