web-dev-qa-db-ja.com

lsを使用した正規表現の使用

私はERを使用しようとしています(拡張正規表現) with ls like ls .+\..+

拡張子を含むすべてのファイルを印刷しようとしています(ls *.*、しかし私はERを使用してみたかった。

そのコードを実行すると、次のエラーが表示されます:ls: .+..+: No such file or directory

35
Lucas Rezende

Shell globbing と正規表現を混同しています。正規表現を使用してファイル名を一致させる場合は、次のようにします。

$ ls | egrep '.+\..+'
84
Chris Seymour

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

Bashのようなシェルがサポートするのはglobbingです。これは類似の文字(たとえば*)を使用しますが、同じものではありません。

Bashの新しいバージョンには、正規表現演算子=~があります。

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