Вставка переменной в команду sed в скрипте bash

Вставка переменной в команду sed в скрипте bash

У меня есть текстовый файл, похожий на этот:

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

Я хочу заменить каждое «Ключевое слово» на «число.расширение», где число равно 1 при первом совпадении ключевого слова, 2 при втором совпадении ключевого слова и т. д.

Я знаю, что мне следует использовать цикл bash в сочетании с sed (sed 's:Keyword:Number:g'), но я не уверен, как вставить переменную для числа в эту команду sed.

Поскольку это HTML-файл, между «Ключевыми словами» могут быть пустые строки или любой текст.

решение1

Отредактировано: Вы можете использовать переменную в sed следующим образом:

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

решение2

Это делает то, что вам нужно?

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

Для более сложных замен (например, где задействована математика) может подойти более продвинутый язык сценариев.

Связанный контент