[解決済み] Bashスクリプトで文字列が正規表現にマッチするかどうかをチェックする
2022-03-06 03:02:20
質問
私のスクリプトが受け取る引数の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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Regex オプション文字にマッチさせる方法
-
[解決済み] Regex:最初に出現する文字までのマッチング
-
[解決済み] 正規表現による逆マッチ[重複]の場合
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] 特定の文字が後にない'単語'を探す
-
[解決済み] 正規表現は、文字列がターゲットで終わる場合にのみマッチします。
-
[解決済み] Powershellで完全一致の文字列のみを置換する
-
[解決済み] 展開された正規表現では、どのように解釈されますか?
-
[解決済み] TCL/EXPECTで$expect_outを使用して変数を割り当てるにはどうすればよいですか?