首页 > 解决方案 > 从文件中删除换行符不起作用

问题描述

我尝试使用 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 的行。

我想了解为什么第一行不起作用,以及如何调整第二行以仅与包含该模式的行一起使用。

任何帮助,将不胜感激。

谢谢!

标签: sedlf

解决方案


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

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

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

您的第一个脚本将不起作用,因为sed操作是基于行的。在模式空间中,您可以删除新行。


推荐阅读