bash non-greedy grep 두 문구 사이

bash non-greedy grep 두 문구 사이

원격 서버로 데이터를 보내기 위해 컬 명령을 실행하고 있습니다. 명령의 일부는 --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은 한 줄씩 작동하기 때문에 어떤 것과도 일치하지 않을 것으로 예상됩니다.

관련 정보