Einfügen einer Variable in den Sed-Befehl im Bash-Skript

Einfügen einer Variable in den Sed-Befehl im Bash-Skript

Ich habe eine Textdatei ähnlich dieser:

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

Ich möchte jedes „Schlüsselwort“ durch „Nummer.Erweiterung“ ersetzen, wobei die Nummer bei der ersten Schlüsselwortübereinstimmung 1, bei der zweiten Schlüsselwortübereinstimmung 2 usw. ist.

Ich weiß, dass ich eine Bash-Schleife in Kombination mit sed verwenden sollte (sed ‚s:Keyword:Number:g‘), aber ich bin nicht sicher, wie ich in diesen Sed-Befehl eine Variable für eine Zahl einfüge.

Da es sich um eine HTML-Datei handelt, können zwischen diesen „Schlüsselwörtern“ Leerzeilen oder beliebiger Text stehen.

Antwort1

Bearbeitet: Sie können die Variable in sed wie folgt verwenden:

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

Antwort2

Erfüllt es Ihren Zweck?

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

Für kompliziertere Ersetzungen (z. B. wenn Mathematik im Spiel ist) sind fortgeschrittenere Skriptsprachen möglicherweise besser geeignet.

verwandte Informationen