替换换行符和以下空格,直到文件中的特定字符串

Pet*_*rus 2 unix perl sed

如何使用单线sedperl替换换行符和空格,直到特定字符串?

例如,我想在文件中的字符串'XYZ'之前替换换行符和以下空格。所有以单词“ XYZ”开头的行都将附加在前一行之前(带有一个额外的空格)。

lorem ipsum dolor坐在amet
  XYZ lorem ipsum dolor坐在amet
    xxx lorem ipsum dolor坐amet
  DDD lorem ipsum dolor坐在amet
      XYZ lorem ipsum dolor坐在amet
cccc lorem ipsum dolor坐amet

   XYZ lorem ipsum dolor坐在amet

输出将是

lorem ipsum dolor坐amet XYZ lorem ipsum dolor坐amet
    xxx lorem ipsum dolor坐amet
  DDD lorem ipsum dolor坐在阿梅特XYZ lorem ipsum dolor坐在阿梅特
cccc lorem ipsum dolor坐amet XYZ lorem ipsum dolor坐amet

ike*_*ami 5

perl -0777pe's/\n\s*(?=XYZ)/ /g' file
Run Code Online (Sandbox Code Playgroud)

-0777 使整个文件被视为一行。

编写的命令将输出到STDOUT,您可以根据需要重定向。-i~并且-i将编辑“到位”,以分别不备份。