массовое переименование с помощью sed - PullRequest
0 голосов
/ 22 августа 2011

Мне нужно работать с огромным XML-файлом, который был экспортирован из Excel.

Файл выглядит так:

<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 Row-элементов.

Таким образом, всегда есть один Row-тег с 7-ю тегами данных. Теперь я хотел бы переименовать каждый первый тег данных в «один», второй в «второй» и т. Д.

Какой правильный синтаксис sed для этого?

1 Ответ

2 голосов
/ 22 августа 2011

Попробуйте вместо этого использовать 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>
...