GNU/Linux >> Linux の 問題 >  >> Linux

Bash スクリプトのパターン マッチング

Bash グロブ パターン マッチング [0-9] 数字の照合に使用できます:

if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi

または、正規表現パターン マッチングを使用できます =~ で :

if [[ $var1 =~ .*,123[0-9]{3},.* ]] ; then echo "Pattern matched"; fi

文字クラスを使用:[0-9] 0 に一致 、 9 、および文字セット内のそれらの間のすべての文字。少なくとも Unicode (UTF-8 など) およびサブセット文字セット (US-ASCII、Latin-1 など) では、数字 1 です。 8 まで .したがって、ラテン数字の 10 桁のいずれかと一致します。

if [[ $var1 == *,123[0-9][0-9][0-9],* ]] ; then echo "Pattern matched"; fi

=~ の使用 == の代わりに パターン タイプをシェル標準の "glob" パターンから正規表現 (略して "regexes") に変更します。同等の正規表現をもう少し短くすることができます:

if [[ $var1 =~ ,123[0-9]{3}, ]] ; then echo "Pattern matched"; fi

最初の短縮は、正規表現が文字列全体ではなく、任意の部分のみに一致する必要があるという事実に由来します。したがって、先頭と末尾の * に相当するものは必要ありません glob パターンで見つけた s。

2 番目の長さの減少は、{n} によるものです。 これにより、正規表現でパターン自体を実際に繰り返す代わりに、前のパターンの正確な繰り返し回数を指定できます。 ([0-9]{2,4} のように、最小値と最大値を指定することで、任意の範囲の繰り返し回数に一致させることもできます 行の 2 桁、3 桁、または 4 桁のいずれかに一致します。)

名前付き文字クラスを使用して数字を一致させることもできることに注意してください。ロケールに応じて、[[:digit:]] [0-9] とまったく同じかもしれません 、または Unicode の「数値、10 進数」プロパティを持つ他のスクリプトの文字が含まれる場合があります。

if [[ $var1 =~ ,123[[:digit:]]{3}, ]] ; then echo "Pattern matched"; fi

Linux
  1. Bashスクリプトをデバッグする方法は?

  2. タイプセット-aスクリプトにエラーがありますか?

  3. Bashスクリプトで文字列を分割する方法

  1. URLからbashスクリプトを実行

  2. bash スクリプトをデーモンとして実行する

  3. パスに bash スクリプトを追加する

  1. Bashスクリプトをファイルに接続できますか?

  2. IP アドレスを抽出する Linux bash スクリプト

  3. jenkins パイプラインで bash コマンドを実行する