のようなER (拡張正規表現)を使用しようとしています。ls
ls .+\..+
拡張子を含むすべてのファイルを印刷しようとしています(使用できたはずですがls *.*
、ERを使用してみたかったのです)。
そのコードを実行すると、次のエラーが発生しますls: .+..+: No such file or directory
。
正規表現とシェルグロブを混同しています。正規表現を使用してファイル名を照合する場合は、次のように実行できます。
$ ls | egrep '.+\..+'
使用しているシェルはわかりませんが、一般的な* nix CLIツール(、など)はサポートしていますが、通常はそのように正規表現をサポートしgrep
てsed
いません。
bashのようなシェルがサポートしているのはglobbingです。これは、いくつかの類似した文字(*など)を使用しますが、同じものではありません。
新しいバージョンのbashには、正規表現演算子があり=~
ます。
for x in `ls`; do
if [[ $x =~ .+\..* ]]; then
echo $x;
fi;
done