(拡張正規表現)をls
とし、ls .+\..+
を使用しようとしています。lsで正規表現を使用
という拡張子を含むすべてのファイルを印刷しようとしています(私はls *.*
を使用していた可能性がありますが、ERを使用したいと思います)。
このコードを実行すると、このエラーが発生します。ls: .+..+: No such file or directory
(拡張正規表現)をls
とし、ls .+\..+
を使用しようとしています。lsで正規表現を使用
という拡張子を含むすべてのファイルを印刷しようとしています(私はls *.*
を使用していた可能性がありますが、ERを使用したいと思います)。
このコードを実行すると、このエラーが発生します。ls: .+..+: No such file or directory
正規表現をshell globbingと混同しています。あなたが行うことができ、ファイル名と一致する正規表現を使用する場合:
$ ls | egrep '.+\..+'
ですからまず、私が使用しようとしているものがREを受け入れるかどうかを確認しなければなりません。 –
パターンを 'globbing'と一致させることができない場合は、代わりの方法を使わなければなりません。 * F.Y.I *ツール 'find'は正規表現マッチングをサポートしています。 –
あなたが使用しているシェル何を言いませんが、一般的ながありますが、それらは一般的に、そのように正規表現をサポートしていません* nix CLIツール(grep
、sed
など)があります。
bash doのようなシェルは、類似の文字(*など)を使用していますが、同じものではありません。globbingです。
for x in `ls`; do
if [[ $x =~ .+\..* ]]; then
echo $x;
fi;
done
クール!私はそれについて聞いたことがない! :)それは '=〜'のみを使用するため、通訳者は私が一致しようとしていることがREであることを理解するでしょうか? –
* test *の文脈で使用しなければならない、私は二重括弧で考えるので、この特定のケースでは、(e)grepを通してパイプする方がずっと簡単です。しかし、それについて知ることは有益です。 – delicateLatticeworkFever
ありがとうございました!私はこのヒントを覚えています! ;) –
私はあなたが混乱のREとシェルのワイルドカードだと思う:のbashの
新しいバージョンでは、正規表現演算子、
=~
を持っています。答えはまた、彼女があなたが使っているものに依存します。 – Madbreaks私はlsでREを使用できませんか? –
ls用の非標準的なスクリプトを使用していない限り、lsは正規表現を使用しません。また、osはあなたのコマンドに渡される前に、*のような特別なワイルドカード文字を処理します。代わりに 'find'を使ってみてください – GetSet