使用Sed天真地将文本文件转换为xml

时间:2012-11-26 00:48:52

标签: xml sed

我的记录中的文本文件看起来像这样

BOOK|100004
TRAN|A
ANAM|Alberta 
TNAM|The School Act; the School Assessment Act. The Tax Recovery Act. The School Grants         Act. The School Attendance Act and General Regulations of the Department of Education 
PBLS|King's Printer
SUB1|Alberta, Canada, Canadian Prairies, NOISBN

我需要创建一个具有此格式的xml文件,

<BOOK>100004</BOOK>
<TRAN>A</TRAN>
<first 4 chars> text data </ first 4 chars again>

我想我差点就像这样的sed命令,

$sed 's#([:alpha:]\{4\})\|(*)#\<\1\>\2<\/\1\>#g' 

除了我收到此错误: - sed: -e expression #1, char 41: invalid reference \1 on s'命令的RHS`

任何sed专家都想把我推向一条充满活力的道路?

1 个答案:

答案 0 :(得分:2)

Sed使用旧式正则表达式,而不是“扩展”正则表达式,因此特殊字符的默认含义基本相反:“普通”sed中的捕获组为\(...\),而不是(...) 。与转义的|字符相同:转义它会使其变为交替。一个工作的sed脚本如下所示:

sed 's#\([^|]\+\)|\(.*\)#<\1>\2</\1>#'

如果要使用扩展正则表达式,可以使用-r标志:

sed -r 's#([^|]+)\|(.*)#<\1>\2</\1>#'