[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Uso di sed per modificare un file



shacky ha scritto:
Nello specifico, i file di configurazione in questione sono quelli di
Shorewall, che hanno come ultima riga questa:

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Questa riga non si può togliere, e qualsiasi riga di configurazione va
inserita prima di essa.
Come posso farlo, con sed?

Riprendendo l'esempio di Davide, devi fare:

cat file_di_conf | sed "s/\(^#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE$\)/quello_che_vuoi_inserire_prima\n\1/"

Ti spiego un po più in dettaglio, se tu nell'espressione regolare racchiudi qualcosa tra parentesi tonde, devi quotarle con il backslash in questo modo \(expr\), puoi riutilizzare quello che viene matchato (passatemi il termine) nella sostituzione inserendo \x dove x e la posizione del gruppo di parentesi, mi sembra che si possa arrivare fino a 9 gruppi. Quindi nell'esempio racchiudendo tra parentesi la sola riga che ti interessa puoi farvi riferimento con \1, non sono sotto linux quindi non ho possibilità di provare l'esempio che ho scritto, ma ho aggiunto ^ e $ per far si che venga matchata la riga completa che contiene la frase in questione. A questo punto nell'espressione di sostituzione usando quello_che_vuoi_inserire_prima\n\1 avrai come risultato che la riga in questione sarà sostituita da quello_che_vuoi_inserire_prima seguito da un \n (ovvero un accapo) e poi dal contenuto di \1, ovvero tutta la riga che cercavi.

Se hai ancora dubbi fai un fischio.

Ciao.

--
Fabio Napoleoni
fabio@zenit.org

****************************************************************
 "Computer Science is no more about computers than astronomy is
 about telescopes"
                                            Edsger W. Dijkstra
****************************************************************



Reply to: