2016-11-07 13 views
0

ファイル名に100より大きい数字が含まれているが、私が作成したスクリプトを取得できないすべてのファイルを削除しようとしています。ここで私はこれまで書いたものです:ファイル名にbashの特定の値を超えるファイル名を指定します。

#!/bin/bash 

files=$(ls $1) 
regex='test__(\d+).txt' 

for f in $files 
do 
    if [[ $f =~ $regex ]]; then 
     filenum=${BASH_REMATCH[1]} 
     if [ $filenum > 100 ]; then 
      rm $f 
     fi 
    fi 
done 

デバッグスクリプトを中心に様々なecho文を置くことによって、私はそれが正規表現に一致する通過できないことを発見しました。実際には、コマンドラインで数字の文字列をまったく一致させることはできません。ls | grep [0-9]はファイル名と数字を一致させますが、ls | grep [0-9]+はまったく一致しません。

私はbashが正規表現をどのように処理するかについて知っていますか?それとも私が問題の原因となっているプログラムのどこかで苦労したことはありますか?任意のスクリプトの

+1

bashは '桁のための\ D 'を認識しない - [[:桁:]]' '使う[0-9]'や '代わりに。 grepは、 '+'をメタ文字として認識するための '-E'オプションが必要です。あるいは、エスケープする必要があります(' \ + ' - GNU拡張です)。 –

+1

'grep -E [0-9] +'が動作するはずです。 – karakfa

答えて

0

の必要はありません:

rm *[2-9][0-9][0-9]* *[0-9][0-9][0-9][0-9]* *10[1-9]* *1[1-9][0-9]* 
関連する問題