2016-09-16 5 views
0

何か有用なことをするために正規表現を使用する方法を見つけようとしています。私は自分がしていることすべてについて完全には不明であり、私は試行錯誤に頼ってしまった。それは有効ではない。など私はBashの正規表現に苦労しています

私は文字で始まり、現在のディレクトリ内のファイルを一覧表示しようとしている、番号が含まれ、小文字の文字が続くドットで終わり、 だから私は文字で始まる知っては次のようになります。

^[a-zA-Z] 

しかし、私はその数字にCONTAINSという数字を付ける方法を知らない。私はドットで終わりを知っている[\.]*することができますが、私はよく分かりません。私は$が単語の最後にある文字列にマッチするのにも使われているのを見ています。

正規表現でfindを使用する必要があるかどうかはわかりません。ls | grep ....私は完全に失われています。いずれの方向にも感謝します。

私が尋ねようとしていた特定の質問は、一緒に表現を接着する方法でした。たとえば、私はls |を試しました。 grep^[a-zA-Z] [0-9]しかし、これは数字で始まる文字で始まるファイルのみを表示します。私は手紙で始まる正規表現をどのように書くのか分からず、次の要件を追加します。番号が含まれています。

+2

ここで具体的な質問を見つけるのは難しいです。 Bashパターンマッチングと正規表現の良い読み方の一般的な指針は、[マニュアル](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)、[BashGuide](http: //mywiki.wooledge.org/BashGuide/Patterns)と[Bash Hackers Wiki](http://wiki.bash-hackers.org/syntax/pattern)を参照してください。 'find'について知りたい場合は、[findutils manual](https://www.gnu.org/software/findutils/manual/html_mono/find.html)が必要です。 –

+3

grepで使用するRegexesは、** bash **正規表現ではありません。** grep **正規表現です.GREPバージョンに応じて、BRE、ERE、またはPCREでも構いません。パス。 ** bash **正規表現は '[[$ str =〜$ re]]'構文で使用され、純粋にERE構文に準拠しています。 –

+0

最も重要なのは、文字列に対する正規表現テストの正規表現を使った実験です。regexr、regex101のようなサイトを使用します。 –

答えて

0

オンラインでは、たくさんのドキュメントがあります。 GNU's Reference Manual

あなたの特定の例は、のようなものが必要となる:

^[:alpha:].*[:digit:].*\.[:lower:]$ 

をまたはPOSIXクラスが利用できない場合:行の

  • 開始:

    ^[a-zA-Z].*[0-9].*\.[a-z]$ 
    

    あなたは、のいずれかとして読むことができます

  • 文字(大文字または小文字)
  • 任意の文字、0回以上
  • 数字
  • 任意の文字、0回以上
  • のドット(バックスラッシュでエスケープされなければならない)
  • 小文字
  • 端ライン

あなたが正規表現に落ち着くたら、あなたはあなたがファイルを検索するディレクトリ内lsでそれを使用することができます。

cd <dir> 
ls -1 | grep '^[a-zA-Z].*[0-9].*\.[a-z]$' 

注:いくつかのコメントに基づいて回答を改善しようとしました。手紙と

+0

リンクありがとう –

+1

この回答は関連性のないいくつかのものをまとめています。たとえば、 'ls [a-zA-Z]。* [0-9]。* \。[az]'は正規表現をまったく使用していないので、globパターンを使用しています( '。*'あなたが意図したことをしなかった)。さらに、POSIXクラスが利用可能かどうかは完全に定義されています(BREとEREの3つのグロブで利用可能です)。 –

+2

さらに、ABSは**非常に悪い参照です - しばしば時代遅れであり、一貫してその例で悪い習慣を使用しています。私たちがfreenode #bashチャンネルでやっていることの多くは、それを使って拾った不幸な習慣の人々を壊そうとしています([factoid](http://wooledge.org/~greybot/meta/abs)の言葉で) 「ABSはスクリプトではなくバグを書くように教えてくれるだろう」)。 [Wooledge BashGuide](http://mywiki.wooledge.org/BashGuide)と[bash-hackers wiki](http://wiki.bash-hackers.org/)は、はるかに良い評判の源です。 –

1
  • 開始:^[a-zA-Z]
  • は番号が含まれています:.*[0-9].*
  • はドットと小文字で終了:\.[a-z]$一緒

^[a-zA-Z].*[0-9].*\.[a-z]$ 

最良の方法正規表現と一致するファイルを見つけるにはfind -regexです。あなたが使用するときは^$のアンカーが暗示されているので、それらは省略できます。 -regexはディレクトリとファイル名の両方に一致するため、先頭にある.*/をタックして任意のディレクトリに一致させる必要があります。

find -regex '.*/[a-zA-Z].*[0-9].*\.[a-z]' 
関連する問題