[解決済み】Bashスクリプトで文字列が正規表現にマッチするかどうかを確認する
2022-04-01 17:11:49
質問
私のスクリプトが受け取る引数の1つは、次の形式の日付です。
yyyymmdd
.
入力として有効な日付が得られるかどうかをチェックしたい。
どうすればいいのでしょうか?私は次のような正規表現を使おうとしています。
[0-9]\{\8}
どのように解決するのですか?
テストコンストラクトを使用することができます。
[[ ]]
正規表現のマッチ演算子と一緒に使用します。
=~
を使用すると、文字列が正規表現に一致するかどうかを確認することができます。
具体的なケースでは、こう書けばいい。
[[ "$date" =~ ^[0-9]{8}$ ]] && echo "yes"
というより正確なテスト。
[[ "$date" =~ ^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ ]] && echo "yes"
# |\______/\______*______/\______*__________*______/|
# | | | | |
# | | | | |
# | --year-- --month-- --day-- |
# | either 01...09 either 01..09 |
# start of line or 10,11,12 or 10..29 |
# or 30, 31 |
# end of line
つまり、正規表現を バッシュ は、希望する書式にマッチします。こうすると、できるようになります。
[[ "$date" =~ ^regex$ ]] && echo "matched" || echo "did not match"
の後のコマンドは
&&
の後のコマンドはテストが成功した場合に実行されます。
||
は、テストが失敗した場合に実行されます。
これは、Aleks-Daniel Jakimenkoによる解決策に基づいていることに注意してください。 bashでのユーザー入力の日付形式検証 .
他のシェルでは グレップ . お使いのシェルが POSIX 準拠の場合は、次のようにします。
(echo "$date" | grep -Eq ^regex$) && echo "matched" || echo "did not match"
で 魚 というのは、POSIXに準拠していないため、次のようになります。
echo "$date" | grep -Eq "^regex\$"; and echo "matched"; or echo "did not match"
注意事項 これらのポータブルな grep ソリューションは 防水ではありません 例えば、入力パラメータに改行が含まれていると騙されることがあります。最初に紹介した bash-specific regex check にはこのような問題はありません。
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] ディレクトリが存在しない場合のみmkdirする方法は?
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み] Bashシェルスクリプトの入力引数の存在確認
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] DartでRegExを使うには?
-
[解決済み] 半角スペース用正規表現
-
[解決済み] bashスクリプトで「cd `echo $0 | sed 's/(.***)\/.*/**1/'` 」はどうするのですか?
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] 文字列の最後の文字にマッチする正規表現[重複]について
-
[解決済み] grepで星座を使う
-
[解決済み] Bashスクリプトで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] 正規表現におけるワードバウンダリとは何ですか?
-
[解決済み] 一致した正規表現パターンを awk で表示するには?