У меня есть текстовый файл, похожий на этот:
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'\''/'
Для более сложных замен (например, где задействована математика) может подойти более продвинутый язык сценариев.