Inserindo a variável no comando sed no script bash

0

Eu tenho um arquivo de texto semelhante a este:

Some-text
Keyword
Some-text
Some-text
Keyword
Some-text
Keyword
Keyword

Eu quero substituir cada "Keyword" por "number.extension", em que number é 1 na primeira correspondência de palavra-chave, 2 na segunda correspondência de palavra-chave, etc.

Eu sei que devo usar o laço bash combinado com sed (sed: s: Keyword: Number: g '), mas não tenho certeza de como inserir variável para number nesse comando sed.

Como este é um arquivo HTML, pode haver linhas em branco ou qualquer texto entre as "Palavras-chave".

    
por Rafal 09.03.2013 / 17:55

2 respostas

1

Isso faz o que você quer?

perl -pe '$n++ if /Some-text/;s/Keyword/SomeText '\''$n'\''/'

Para substituições mais complicadas (por exemplo, onde a matemática está envolvida), uma linguagem de script mais avançada pode ser mais adequada.

    
por choroba 09.03.2013 / 18:18
2

Editado: você pode usar a variável em sed da seguinte forma,

count=1
extension=".jpg"
cp yourfile tempfile
for (( i=1; i<='wc yourfile | awk '{ print $1 }''; i++))
do

#for (( j=1; j<='sed -n ''"$i"' p' yourfile | wc | awk '{ print $2 }''; j++))
#do
        sed -i ''"$i"' s/[a-zA-Z0-9]*[Kk][Ee][Yy][Ww][Oo][Rr][Dd]/'"$count$extension"'/1' yourfile
        diff yourfile tempfile
        if [ $? -ne 0 ]
        then    
        count=$(expr $count + 1)
        cp yourfile tempfile
        fi  
#done
done
    
por s.m 09.03.2013 / 18:56