ls | xargs -n 1 basename | grep -E '[0-9]{1}'
なぜ0〜9の間の単一の数字しか表示されないのを知っている人はいますか?
たとえば、次のような場合があります。
touch 1
touch 22
touch 333
touch test_file
私が実行した場合ls | xargs -n 1 basename | grep -P '[0-9]{1}'
:
1、22、333個のファイルがリストされています。
私が実行した場合ls | xargs -n 1 basename | grep -P '[0-9]{2}'
:
22個と333個のファイルがリストされています。
私は{2}が22個のファイルのみを表示したいと思います。
ベストアンサー1
私の考えでは、あなたが現在起こっているものとは異なることを期待する理由は、あなたが受け入れているからだと思います。
[0-9]{n}
これは[0-9]のn個の文字だけを一致させ、残りは捨てることを意味しますが、実行する操作は[0-9]のn個の文字を見つけて一致と呼ぶことです。だから
[0-9]{1}
いつでも[0-9]と一致する項目を正確に探すので、1つは一致し、22個を確認すると最初の2つで止まり、残りは見ずに一致すると思います。 333も同じだ。指定した場合
[0-9]{2}
1つに一致せず、22のゲームと一致し、次に333のゲームのうち33のゲームと一致するのでインポートします。
slmが言ったように、ここでは単語の境界が重要です。あなたの質問に一致するgrep正規表現には、-Pスタイルと-Eスタイルの両方があります。次のように、-EでGNU \ <と\>を使用できます。
ls | xargs -n 1 basename | grep -E '\<[0-9]{1}\>'
または \b は、次のように -E または pcre -P と一致します。
ls | xargs -n 1 basename | grep -P '\b[0-9]{1}\b'