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が正規表現をどのように処理するかについて知っていますか?それとも私が問題の原因となっているプログラムのどこかで苦労したことはありますか?任意のスクリプトの
bashは '桁のための\ D 'を認識しない - [[:桁:]]' '使う[0-9]'や '代わりに。 grepは、 '+'をメタ文字として認識するための '-E'オプションが必要です。あるいは、エスケープする必要があります(' \ + ' - GNU拡張です)。 –
'grep -E [0-9] +'が動作するはずです。 – karakfa