次のスキーマファイルを含むディレクトリがあります。
SNAFU12.jpg
SNAFU1.jpg
SNAFU123.jpg
私はこのコードを試しましたが、出力は生成されませんでした。
for f in *.jpg; do
regex="/\d/g"
file="f:5:6"
if [[ $file =~ $regex ]]; then
echo ${BASH_REMATCH[1]}
fi
done
私の予想結果は次のとおりです。
12
1
23
答え1
/
* nixのディレクトリ区切り文字である2つのsを一致させようとしていますが、それを含むファイル名がないため、正規表現パターンはどれも一致しません。私は/.../g
それがあなたのJavaScript(または他の)正規表現の練習から来たと仮定します。そうではありませんか?
する:
for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
bash
正規表現は\d
文字クラスキーワードをサポートしません[0-9]
。したがって、使用する方が良いです[0-9]
。に依存するには、locale
文字クラスを使用してください[:digit:]
。
for i in *.jpg; do [[ $i =~ ([[:digit:]]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
例:
$ for i in *.jpg; do [[ $i =~ ([0-9]+)\.jpg$ ]] && echo "${BASH_REMATCH[1]}"; done
123
12
1
答え2
ls
ファイルを含むフォルダの出力を変更します。
ls SNAFU* | sed -e 's/SNAFU\|.jpg//g'