Linux

如何將匹配模式的行附加到上一行

  • August 28, 2019

前任:

輸入文件

******************
.WER
+ aaa bbb ccc
+ ddd eee 
+ fff ggg hhh
******************
.SDF
+ zzz xxx yyy 
+ iii  
+ kkk lll
******************
.XCV
+ uuu vvv ggg 
+ hhh qqq 
+ rrr ttt jjj
******************

期望的輸出:

******************
.WER aaa bbb ccc ddd eee fff ggg hhh
******************
.SDF zzz xxx yyy iii kkk lll
******************
.XCV uuu vvv ggg hhh qqq rrr ttt jjj
******************

我想將匹配模式“+”的行附加到前一行,並用空格替換“+”。

任何人都可以通過使用 awk 或 sed(甚至 grep)命令來解決這個問題嗎?

我是 Linux 的初學者。請解釋整個命令行的細節。

您用 /linux 標記了您的問題,因此您可能正在使用 GNU sed。然後您可以使用該-z選項在一個緩衝區中處理整個文件並使用:

sed -z 's/\n+//g'

這意味著s將每個換行符 ( \n) 後跟一個+符號替換為空,這意味著加入+從前一個開始的行,刪除+.

我帶來了這個awk

awk 'BEGIN {RS=""}{gsub(/\n\+/,"", $0); print $0}' file

輸出:

******************
.WER aaa bbb ccc ddd eee  fff ggg hhh
******************
.SDF zzz xxx yyy  iii   kkk lll
******************
.XCV uuu vvv ggg  hhh qqq  rrr ttt jjj
******************

引用自:https://unix.stackexchange.com/questions/537908