私は、HTTPステータスコードとカールリクエストのボディの両方をキャプチャする正規表現を作成しようとしています。以下の正規表現パターンは複数のオンラインサイトで動作しますが、私のMacのコマンドラインではin a shell if-statementと一致しません。私の正規表現はオフですか、それとも別のことが起こっていますか?Curl HTTPステータスコードとボディレスポンスを取得するための正規表現
RESPONSE=$(curl -s -i -X GET http://www.google.com/)
# Match and capture the status code, match the headers, match two new lines, match and capture an optional body
re="^HTTP\/\d\.\d\s([\d]{3})[\w\d\s\W\D\S]*[\r\n]{2}([\w\d\s\W\D\S]*)?$"
if [[ "${RESPONSE}" =~ $re ]]; then
echo "match"
# Now do stuff with the captured groups, "${BASH_REMATCH[...]}"
else
echo "no match"
fi
私はこれを行う他の方法(CentOS 5を実行しているマシンをターゲットにしています)にも開いています。
ファイルに身体を書くと、stdoutにだけステータスコードカール出力を持つように '-w'カールフラグを使うのか? –
'^ HTTP/[0-9] \。[0-9] [0-9] {3} OK'エスケープするピリオドとスペースはOKですが、他のエスケープシーケンスは解釈されています文字通り。ステータスコードをキャプチャするとどちらも機能するとは思わない。 sed、awk、perlなどの方が良いかもしれません。 –
@ColeTierneyあなたはそれを拡張できますか? '\ d'や' \ w'のような他のエスケープシーケンスは文字通り解釈されるのはなぜですか? –