使用sed进行大规模重命名

使用sed进行大规模重命名,sed,Sed,我必须处理一个从Excel导出的巨大XML文件 该文件如下所示: <Row> <Data>some data..</Data> <Data>some data..</Data> <Data>some data..</Data> <Data>some data..</Data> <Data>some data..</Data> <Data>so

我必须处理一个从Excel导出的巨大XML文件

该文件如下所示:

<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个数据子标记。现在,我想将每个第一个数据标记重命名为“one”,第二个数据标记重命名为“second”,依此类推


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

考虑改用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}
开始{
NUM[1]=“一”
NUM[2]=“两个”
NUM[3]=“三”
数字[4]=“四”
NUM[5]=“五”
NUM[6]=“六”
NUM[7]=“七”
}

/你说的“重命名”是什么意思?您是想替换“somedata..”部分,还是真的要更改标记?我认为sed不是完成这项工作的合适工具。您是否考虑过使用python或perl脚本来完成这项工作?Sed可能不是最好的工具,但我不会认为这项工作是错误的。
$ 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>