2012-11-26 63 views
1

我有看起來像這樣的用sed來天真的文本文件轉換成XML

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'命令的[R HS'

任何sed專家都想將我推向啓發路徑?

回答

2

Sed使用舊式正則表達式,而不是'擴展'正則表達式,所以特殊字符的默認含義基本相反:'plain'sed中的捕獲組是\(...\),而不是(...)。與逃脫的|字符一樣:轉義它變成交替。一個工作sed腳本的樣子:

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

如果你想使用正則表達式的擴展,可以使用-r標誌:

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

太感謝你了! –