@ "LBL_18989" @ "LBL_15459"、@ "LBL_14359" ..のような文字列について、.mで終わるすべてのファイルをディレクトリで検索したいと思います。
私のコマンドは:
find . type f -name \*.m | grep '@"LBL_[[0-9]"]+'
しかし、それは期待される結果を与えません。
あなたは常にあなたの議論を引用するべきです。findの-nameパターンには「*」が含まれています。これは、シェルがfindに渡す前にglobとして展開しようとすることを意味します。findの出力をgrepにパイプする代わりに、-regexを使用することもできます。
find . -type f -regex '@"LBL_[[:digit:]"]+'
jdiのコメントに基づいて、これらのファイルの内容で特定の正規表現を検索することをお勧めします。その場合は、次を使用できます。
find . type f -name '*.m' -exec grep -E '@"LBL_[[:digit:]"]+' /dev/null {} +
あなたのコードは私のために実行されます。ただし、質問で述べた正規表現は、サンプルリストのファイル名だけでなく、はるかに多く一致します。これは、ファイル名に名前の検証が必要かどうかを確認する場合に問題になる可能性があります。これは、実際にはそうではないことを検証するものもあるためです。あなたの正規表現パターン
grep'@ "LBL _ [[0-9]"] +'
次のようなファイル名にも一致します
あなたのリストが本当に代表的なものであるなら、私は代わりに使用します
grep'@ "LBL _ [[0-9]] +"'
引用符をパターンの最後のプラスの後に移動します。grepを使用できますが、それがユースケースかもしれませんが、egrepまたはgrepを-Eスイッチとともに使用すると、[[:digit:]]クラスを使用できるようになります。POSIX.2は、ダッシュ文字を使用した角かっこ式の範囲に眉をひそめます。POSIX仕様から:「範囲は非常に照合シーケンスに依存し、ポータブルプログラムはそれらに依存することを避けるべきです。」