2011-08-22 96 views
0

我必须使用从Excel导出的巨大XML文件。使用sed重命名

文件看起来是这样的:

<Row> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Data>some data..</Data> 
<Row> 

大约有2000行元素。

所以总有一个行标签有7个数据子标签。现在我想重新命名每个第一个数据标签为'一',第二个为'第二'等。

什么是正确的sed语法来做到这一点?

+1

你所说的 “重命名” 是什么意思?你想要替换“一些数据..”部分,还是实际更改标签? – Sorpigal

+0

我不认为sed是做这项工作的正确工具。你有没有考虑过使用python或Perl脚本来做到这一点? –

+0

Sed可能不是最好的*工具,但我很难说这个工作是错误的。 – Sorpigal

回答

2

考虑用awk,而不是...

BEGIN { 
    NUM[1]="one" 
    NUM[2]="two" 
    NUM[3]="three" 
    NUM[4]="four" 
    NUM[5]="five" 
    NUM[6]="six" 
    NUM[7]="seven" 
} 

/<Row/{ 
    print 
    for(i=1;i<8;i++) { 
     getline 
     sub(/Data/, NUM[i]);print 
    } 
} 
/<\/Row/{print} 

输出:

$ awk -f r.awk input 
<Row> 
<one>some data..</one> 
<two>some data..</two> 
<three>some data..</three> 
<four>some data..</four> 
<five>some data..</five> 
<six>some data..</six> 
<seven>some data..</seven> 
</Row>