我试图使用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'
代码不会更改任何内容。事实上,即使当我删除模式并寻找它时,仍然不起作用
这似乎适用于所有线路:
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
操作是基于行的。在填充图案空间中,可以删除新行。
在多行上下文中使用perl(有点像自然(:
perl -0 -pe 's/(s+SourceField:s+LOAN-NO)ns+/$1:/' file
s+
是空格(或空格(。这不是一个清晰可读的代码吗-0
使Perl在单个字符串变量中诋毁整个文件
Format: 0000000
InputMask: &&&&&&&
OrdinalPosition: 0
Required: True
SourceField: LOAN-NO:SourceTable: MASTER