Sed 从文件中删除换行符无效

Sed 从文件中删除换行符无效,sed,lf,perl,Sed,Lf,Perl,我试图使用sed从包含图案的行中删除换行符。 我的台词是: Format: 0000000 InputMask: &&&&&&& OrdinalPosition: 0 Required: True

我试图使用sed从包含图案的行中删除换行符。 我的台词是:

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO
              SourceTable:               MASTER
我希望它看起来像这样:

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO:SourceTable:               MASTER
我的代码是:

cat file.txt | sed 's/\(*.SourceField.*\)\(\n\)/\1:/g'
代码没有改变任何东西。 事实上,即使我删除该模式并查找\n它仍然不起作用

这似乎适用于所有线路:

cat file.txt | sed ':a;N;$!ba;s/\n//g' 
但我不能让它仅用于包含SourceField的行

我想了解为什么第一行不起作用,以及如何调整第二行以只处理包含模式的行

任何帮助都将不胜感激

谢谢

$ sed -E '/SourceField:/{N;s/\n */:/;}' file

              Format:                    0000000
              InputMask:                 &&&&&&&
              OrdinalPosition:           0

              Required:                  True
              SourceField:               LOAN-NO:SourceTable:               MASTER
您的第一个脚本无法工作,因为
sed
操作是基于行的。在图案空间中,您可以删除新行。

在多行上下文中使用(有点自然):

  • \s+
    是空格(或空格)。这不是一个清晰易读的代码吗
  • -0
    使Perl在单个字符串变量中读取整个文件


效果很好。谢谢
perl -0 -pe 's/(\s+SourceField:\s+LOAN-NO)\n\s+/$1:/' file
          Format:                    0000000
          InputMask:                 &&&&&&&
          OrdinalPosition:           0

          Required:                  True
          SourceField:               LOAN-NO:SourceTable:               MASTER