SED 또는 기타 명령을 사용하여 두 번째 행에 열 기반 일치를 추가하려면 어떻게 해야 합니까?

SED 또는 기타 명령을 사용하여 두 번째 행에 열 기반 일치를 추가하려면 어떻게 해야 합니까?

zcat내 명령의 결과는 다음과 같습니다

1 - URL Template: https://www.test.com

2 - Response: <200 OK,{Server=[nginx], Date=[Wed, 11 May 2022 01:05:06 GMT], Content-Type=[text/html; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Vary=[Accept-Encoding]}>

호출의 라인 2 결과를 아래와 같이 라인 1에 추가하고 싶습니다.

URL Template: https://www.test.com <200 OK,{Server=[nginx], Date=[Wed, 11 May 2022 01:05:06 GMT], Content-Type=[text/html; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Vary=[Accept-Encoding]}>

내가 할 수 있을까?

답변1

간단한 명령은 어떻습니까 awk?

$ awk -F "1 - |2 - Response:" 'NF>1 {printf "%s",$2} END{print ""}' input_file
URL Template: https://www.test.com <200 OK,{Server=[nginx], Date=[Wed, 11 May 2022 01:05:06 GMT], Content-Type=[text/html; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Vary=[Accept-Encoding]}>

빈 줄을 무시하여 처리합니다.

다음을 가정합니다.

  • 비어 있지 않은 두 줄은 항상 고정된 순서로 먼저 표시되고 그 1 - URL Template: ...다음에 표시됩니다 2 - Response: ....
  • 표시되는 두 줄 사이에 공백이 아닌 다른 줄이 나타나지 않습니다. 그렇지 않은 경우 추가 논리가 필요합니다. 그러한 변화는 간단합니다.
  • 두 문자열 "1 - " 및 "2 - 응답: "은 각 줄의 시작 부분에 한 번만 나타납니다.

답변2

사용sed

$ sed '/^1/{:a;N;s/^[^A-Z]*\(.*\)\n[^<]*\(.*\)/\1 \2/;ba}' input_file
URL Template: https://www.test.com  <200 OK,{Server=[nginx], Date=[Wed, 11 May 2022 01:05:06 GMT], Content-Type=[text/html; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Vary=[Accept-Encoding]}>

답변3

 sed '/^$/d' filename| awk 'NR==2{gsub(/.*Response:/,"",$0)}1'|sed "1s/.*-//g"|perl -pne "s/\n/ /g"

산출

 URL Template: https://www.test.com  <200 OK,{Server=[nginx], Date=[Wed, 11 May 2022 01:05:06 GMT], Content-Type=[text/html; charset=UTF-8], Transfer-Encoding=[chunked], Connection=[keep-alive], Vary=[Accept-Encoding]}>

관련 정보