SEDまたは他のコマンドを使用して2行目に列ベースの一致を追加するにはどうすればよいですか?

SEDまたは他のコマンドを使用して2行目に列ベースの一致を追加するにはどうすればよいですか?

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]}>

空行を無視して処理します。

以下を想定します。

  • 空でない2行は常に固定順序で最初に表示され、その後1 - URL Template: ...に表示されます2 - Response: ...
  • 表示される 2 行間にスペース以外の行は表示されません。それ以外の場合は追加のロジックが必要です。そのような変更は簡単です。
  • 2つの文字列「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]}>

関連情報