Inserimento della variabile nel comando sed nello script bash


0

Ho un file di testo simile a questo:

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

Voglio sostituire ogni "Parola chiave" con "number.extension" dove il numero è 1 alla prima corrispondenza della parola chiave, 2 alla seconda corrispondenza della parola chiave ecc.

So che dovrei usare il ciclo bash combinato con sed (parola chiave: sed: numero: g '), ma non sono sicuro di come inserire la variabile per il numero in quel comando sed.

Poiché si tratta di un file HTML, ci possono essere righe vuote o qualsiasi testo tra quelle "Parole chiave".

Risposte:


1

Questo fa quello che vuoi?

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

Per sostituzioni più complicate (ad es. In caso di matematica), un linguaggio di scripting più avanzato potrebbe essere più adatto.


Grazie, ma non carica alcun file e (per quanto posso vedere) questo è molto importante. Potresti spiegare come dovrebbe funzionare?
Rafal

@Rafal: basta aggiungere il percorso del file come ultimo argomento o reindirizzarlo (pipe) allo script. Lo -pswitch carica automaticamente il file.
Choroba,

Il tuo script originale non fa nulla con il mio file. Immagino di non essere stato chiaro su ciò di cui ho bisogno. Quando sostituisco "Some-text" con ". *?" e in secondo luogo con riferimento "\ 1" cambia la parola chiave in numero di riga. L'ho modificato, per fare esattamente quello di cui ho bisogno: 'perl -pe' $ n ++ if / MYLONGKEYWORD /; s / MYLONGKEYWORD / $ n / 'esempio-input.html'. Grazie per l'aiuto!
Rafal

2

Modificato: è possibile utilizzare la variabile in sed come segue,

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

Grazie, ma sfortunatamente, non fa ciò di cui ho bisogno. Ho aggiornato la domanda per essere più chiari. Questo testo tra le parole chiave potrebbe essere molto diverso. Voglio solo sostituire ogni ricorrenza della mia parola chiave con numero crescente ed estensione di file. File HTML di esempio qui dropbox.com/s/qinykn154nhjymu/example.zip
Rafal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.