我的记录中的文本文件看起来像这样
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专家都想把我推向一条充满活力的道路?
答案 0 :(得分:2)
Sed使用旧式正则表达式,而不是“扩展”正则表达式,因此特殊字符的默认含义基本相反:“普通”sed中的捕获组为\(...\)
,而不是(...)
。与转义的|
字符相同:转义它会使其变为交替。一个工作的sed脚本如下所示:
sed 's#\([^|]\+\)|\(.*\)#<\1>\2</\1>#'
如果要使用扩展正则表达式,可以使用-r
标志:
sed -r 's#([^|]+)\|(.*)#<\1>\2</\1>#'