2013-03-11 8 views
27

(拡張正規表現)lsとし、ls .+\..+を使用しようとしています。lsで正規表現を使用

という拡張子を含むすべてのファイルを印刷しようとしています(私はls *.*を使用していた可能性がありますが、ERを使用したいと思います)。

このコードを実行すると、このエラーが発生します。ls: .+..+: No such file or directory

+5

私はあなたが混乱のREとシェルのワイルドカードだと思う:のbashの

新しいバージョンでは、正規表現演算子、=~を持っています。答えはまた、彼女があなたが使っているものに依存します。 – Madbreaks

+1

私はlsでREを使用できませんか? –

+2

ls用の非標準的なスクリプトを使用していない限り、lsは正規表現を使用しません。また、osはあなたのコマンドに渡される前に、*のような特別なワイルドカード文字を処理します。代わりに 'find'を使ってみてください – GetSet

答えて

57

正規表現をshell globbingと混同しています。あなたが行うことができ、ファイル名と一致する正規表現を使用する場合:

$ ls | egrep '.+\..+' 
+1

ですからまず、私が使用しようとしているものがREを受け入れるかどうかを確認しなければなりません。 –

+2

パターンを 'globbing'と一致させることができない場合は、代わりの方法を使わなければなりません。 * F.Y.I *ツール 'find'は正規表現マッチングをサポートしています。 –

3

あなたが使用しているシェル何を言いませんが、一般的ながありますが、それらは一般的に、そのように正規表現をサポートしていません* nix CLIツール(grepsedなど)があります。

bash doのようなシェルは、類似の文字(*など)を使用していますが、同じものではありません。globbingです。

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
     echo $x; 
    fi; 
done 
+1

クール!私はそれについて聞いたことがない! :)それは '=〜'のみを使用するため、通訳者は私が一致しようとしていることがREであることを理解するでしょうか? –

+3

* test *の文脈で使用しなければならない、私は二重括弧で考えるので、この特定のケースでは、(e)grepを通してパイプする方がずっと簡単です。しかし、それについて知ることは有益です。 – delicateLatticeworkFever

+1

ありがとうございました!私はこのヒントを覚えています! ;) –