我一直试图找到一个与cygwin的sed兼容的sed脚本,它将匹配
行 ^<Transaction>
且没有</Transaction>$
我需要一个表达式。当行匹配时,我需要删除行结尾或将下一行附加到当前行的末尾。
问题是我们有xml被转储,当行是两长时,它将它分成2行。
答案 0 :(得分:0)
使用sed:
sed '/^<Transaction>/{/<\/Transaction>$/!{N;s/\n/ /}}'
其工作原理如下。对于以<Transaction>
开头但不以</Transaction>
结尾的行,请附加下一行,并用空格替换换行符。所有其他行保持不变。
如果添加的空间不受欢迎,只需将/ /
更改为//
即可。如果原始文件的任何行已在三中拆分,请运行该命令两次。
答案 1 :(得分:0)
Perl救援:
perl -pe 'chomp if /^<Transaction>/ and not /<\/Transaction>$/' file
答案 2 :(得分:0)
sed ':0 /<\/Transaction>$/!N;s/\(^<Transaction>.*\)\n/\1/;t0'
搜索不以</Transaction>
结尾的行,添加下一行(\n
仍在那里),检查此合并行是否以<Transaction>
开头,如果是 - 删除\n
(\1
是对由\(\)
中的模式组成的第一个组的反向引用,否则什么也不做;如果\n
被删除,请重复。
适用于测试XML文件:
<NotATransaction>a</NotATransaction>
<NotATransaction>b1
b2</NotATransaction>
<Transaction>A</Transaction>
<Transaction>B1
B2
B3
B4
B5</Transaction>
<Transaction>C1
C2</Transaction>
<Transaction>D</Transaction>