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.