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

Unixケースの正規表現?

caseを使用して日付パターンを一致させようとしています コマンドが機能していません。誰かが私を助けてくれますか?

入力01/05/1900 または5/6/1900

使用されたケースステートメント:

ptn="[0-9]|[0-9][0-9]/[0-9]|[0-9][0-9]/[0-9][0-9]|[0-9][0-9][0-9][0-9]"

case "$dt" in 
    $ptn ) echo "valid pattern" ;;
    *) echo "invalid"
esac

ただし、caseステートメントで使用されているパターンは、上記の2つの日付入力を評価していません。

承認された回答:

これを試して。 case グロブのみを理解するため、正規表現の処理は簡単ではありません。 =~ ただし、オペレーターはここでいくつかのソリューションを提供します。

#!/bin/bash
INP="01/05/1900"
ptn="^([0-9]|[0-9][0-9])/([0-9]|[0-9][0-9])/([0-9][0-9]|[0-9][0-9][0-9][0-9])$"
if [[ $INP =~ $ptn ]] ; then
    echo valid pattern
else
    echo invalid
fi

正規表現のサイズを小さくしたい場合は、^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})$ 同様にうまく機能します。


Linux
  1. Linux – LinuxはUnixですか?

  2. Unix Bourne Shellの配列?

  3. カスタム正規表現区切り文字を使用してパターンを含む行番号を見つけますか?

  1. Mac Os X Unixですか?

  2. Linux / UNIX OS サービス :autofs

  3. /etc/sudoers ファイルを編集する正規表現パターン

  1. Grep正規表現:完全ガイド

  2. Linux の glob() で大文字と小文字を区別しない

  3. Linux は Unix ですか?