1

このようなレコードにテキストファイルがあります

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の専門家は私を啓蒙的な道に押しやりたいと思っていますか?

4

1 に答える 1

2

Sedは、「拡張」正規表現ではなく、古いスタイルの正規表現を使用するため、特殊文字のデフォルトの意味は基本的に逆です。「plain」sedのキャプチャグループは\(...\)、ではなく、(...)です。エスケープ文字についても同じ|です。エスケープすると、交互になります。動作するsedスクリプトは次のようになります。

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

-r拡張正規表現を使用する場合は、次のフラグを使用できます。

sed -r 's#([^|]+)\|(.*)#<\1>\2</\1>#'
于 2012-11-26T00:52:01.723 に答える