附加到上一行以进行匹配

Gil*_*Gil 1 bash shell awk sed

如果找到匹配,我可以使用sedawk附加到上一行吗?

我有一个文件格式:

          INT32
          FSHL (const TP  Buffer)
             {
          INT32
          FSHL_lm (const TP  Buffer) 
          { WORD32 ugo = 0; ...
Run Code Online (Sandbox Code Playgroud)

我要做的是扫描独立的开括号{并将其附加到前一个非空白行.对于由同一行中的任何内容追加的开括号,不应该发生匹配.

预期产量:

           INT32
          FSHL (const TP  Buffer){
          INT32
          FSHL_lm (const TP  Buffer) 
          { WORD32 ugo = 0; ...
Run Code Online (Sandbox Code Playgroud)

谢谢你的回复.

pot*_*ong 6

这可能适合你(GNU sed):

sed '$!N;s/\n\s*{\s*$/{/;P;D' file
Run Code Online (Sandbox Code Playgroud)

说明:

  • $!N 除非最后一行将下一行附加到模式空间.
  • s/\n\s*{\s*$/{/ 替换一个换行符后面跟着没有或任何数量的空格,然后是一个开口的花括号,后面跟着没有或任何数量的空白区域到一个开头的花括号.
  • P 打印到包括第一个换行符.
  • D 删除最多并包括第一个换行符(如果是这样,不要开始新的循环).