リモートサーバーにデータを送信するためにカールコマンドを実行しています。コマンドの一部は、--trace-ascii
カールの完全な出力を示しています。
公開されたデータのみを取得するようにこの出力をgrepしようとしています。
以下は出力の例です。x-www-form-urlencoded
最初の発生からすべてをキャプチャしたいと思います。<= Recv SSL data
009c: Content-Length: 89
00b1: Content-Type: application/x-www-form-urlencoded
00e2:
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes
<= Recv SSL data, 5 bytes (0x5)
0000: ....J
<= Recv SSL data, 1 bytes (0x1)
0000: .
== Info: TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
<= Recv SSL data, 57 bytes (0x10)
私が使用するコマンドは次のとおりです。
echo $OUTPUT | grep -Po '(?<=(x-www-form-urlencoded)).*(?= <= Recv SSL data)'
正しい位置から始まるデータを返しますが、以下を含むすべての行も含めます。<= Recv SSL data
私の考えでは:
x-www-form-urlencoded
00e2:
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes
どうすればいいですか?
ありがとう
直す。以下は、使用されるカールコマンドの例です。
OUTPUT=`curl -u user:passwprd -s \
-d "site=test" \
-d "user=admin" \
-d "description=Local system" \
-d "location=NWE" \
-d "site_id=67876" \
-d "telephone=xxxxxx" \
--trace-ascii - -XPOST "https://x.x.x.x/test.php"`
公開されたデータをキャプチャしたいです。
答え1
一般的な質問は次のとおりです。貪欲な数量者。それをaに.*?
置き換えると.*
うまくいきます。
echo $OUTPUT | grep -Po '(?<=(x-www-form-urlencoded)).*?(?=<= Recv SSL data)'
しかし、私はあなたのgrepがあなたにとってとてもうまくいったことに驚きました。 grepは1行ずつ動作するため、どんなものとも一致しないと予想されます。