Inserindo variável no comando sed no script bash

Inserindo variável no comando sed no script bash

Eu tenho um arquivo de texto semelhante a este:

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

Quero substituir cada "Palavra-chave" por "número.extensão", onde o número é 1 na primeira correspondência de palavra-chave, 2 na segunda correspondência de palavra-chave, etc.

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

Como se trata de um arquivo HTML, pode haver linhas em branco ou qualquer texto entre essas "Palavras-chave".

Responder1

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

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

Responder2

Isso faz o que você quer?

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

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

informação relacionada