web-dev-qa-db-ja.com

Bashスクリプトの正規表現

こんにちは素晴らしいコミュニティ、

私は正規表現に関しては完全なドープです。私はそれを学ぶことを延期しました。そして今、私の怠lazは私に追いついています。

私がやろうとしていること:
文字列がこの形式に一致するかどうかを確認します。

10_06_13

すなわち。今日の日付、または「2digits_2digits_2digits」の日付

私がやったこと:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

これはある程度機能します。ただし、着信文字列が011_100_131と等しい場合、正規表現チェックに合格します。

誰かが私を正しい方向に向けるのを手伝ってくれたら幸いです。
乾杯

29
Robbie

=~は、左側の文字列含むが右側の正規表現に一致する場合に成功します。文字列matchesが正規表現かどうかを知りたい場合は、次のように、両側で正規表現を「アンカー」する必要があります。

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

^は文字列の先頭でのみ成功し、$は最後にのみ成功します。

ノート:

  1. 不要な()正規表現と"" から [[ ... ]]
  2. Bashマニュアルは、=~は、文字列が一致すれば成功します。
45
rici