数字を含む正規表現に対していくつかの行をマッチさせようとしています。正規表現の数字の一致方法
Bashのバージョン3.2.25:
#!/bin/bash
s="AAA (bbb 123) CCC"
regex="AAA \(bbb \d+\) CCC"
if [[ $s =~ $regex ]]; then
echo $s matches $regex
else
echo $s doesnt match $regex
fi
結果:
AAA (bbb 123) CCC doesnt match AAA \(bbb \d+\) CCC
私はそれが動作regex="AAA \(bbb .+\) CCC"
を置くが、それは数字だけを一致させるために、私の要件を満たしていない場合。
なぜですか\d+
が一致します123
?
少なくともbash 4.3.11(Ubuntu 14.04に付属のもの) '[0-9] +'は動作しませんしかし、[[0-9] * 'はします。おそらく '+'はサポートされていませんか? –
'' [0-9] + 'は古いBASH 3.2でもうまくいきましたが、なぜUbuntu BASHがそれを好きではないのか分かりません。 – anubhava
Hmmm、決して気にしないで、私は混乱しました。それは '+'を扱わない 'grep 'です(少なくとも追加のオプションはありません)。私のスクリプトはbash regex matching *と* grepの両方を使用しているので混乱します。 –