eliminare paragrafo con sed
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- submax82
- Staff
- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
eliminare paragrafo con sed
tutte le volte che utilizzo sed per cose che non siano banali ci litigo!
devo eliminare un testo che è scritto su più righe da un file che lo contiene al suo interno... nessuno ha qualche idea? serve per una futura versione di gslacky installer...
devo eliminare un testo che è scritto su più righe da un file che lo contiene al suo interno... nessuno ha qualche idea? serve per una futura versione di gslacky installer...
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: eliminare paragrafo con sed
UNIX KISS rulesubmax82 ha scritto:tutte le volte che utilizzo sed per cose che non siano banali ci litigo!
devo eliminare un testo che è scritto su più righe da un file che lo contiene al suo interno... nessuno ha qualche idea? serve per una futura versione di gslacky installer...
[n]vi file_da_cambiare
vai sulla prima riga da eliminare
noti il numero di questa riga, metti sia 33
vai sull'ultima riga da eliminare
noti il numero di questa riga, metti sia 66
:33,66d
:wq
et voila`
EDIT PS:
se conosci le righe, puoi usare anche
sed -e '33,66d' file_da_cambiare
oppure anche ed(1) o ex(1).
Mario Vanoni
- mauro
- Linux 2.x
- Messaggi: 281
- Iscritto il: gio 11 mag 2006, 21:51
- Slackware: current
- Kernel: uno degli ultimi...
- Desktop: dwm
Re: eliminare paragrafo con sed
@mario: magari il testo da eliminare e' localizzato su righe diverse da file a file, e se sono tanti non e' il caso di editarli uno per uno.
@submax82: non ho capito... non e' che puoi postare un esempio? il testo e' sempre lo stesso o lo identifichi in base a qualcosa di specifico?
@submax82: non ho capito... non e' che puoi postare un esempio? il testo e' sempre lo stesso o lo identifichi in base a qualcosa di specifico?
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: eliminare paragrafo con sed
Hai ragione mauro,mauro ha scritto:@mario: magari il testo da eliminare e' localizzato su righe diverse da file a file, e se sono tanti non e' il caso di editarli uno per uno.
@submax82: non ho capito... non e' che puoi postare un esempio? il testo e' sempre lo stesso o lo identifichi in base a qualcosa di specifico?
ma come identificare piu` righe consecutive?
La prima ed ovvia, no problems
sed -e '/quello_che_vuoi_inconfondibile/d'
magari ancorata con /^...$/
pero` attenti all RE interpretate,
ma le seguenti?
E come riconoscere l'ultima e smettere?
OK, GNU sed sopporta estensioni stile
sed -e '/prima_riga_inconfondibile/,+10d
cancella anche le seguenti 10 righe.
Con piu` files usabile, con numero fisso di righe.
EDIT: altra possibilita`, dai tempi di AT&T sed
Un file con tutto il testo che vuoi eliminare,
ad ogni riga aggiungi all'inizio
/^
alla fine della riga
$/d
chiamalo magari file.sed
poi
sed -f file.sed il_file_che_vuoi
ATTENTI: con frasi uguali in il_file_che_vuoi, GUAI IN VISTA !!!
Mario Vanoni
- submax82
- Staff
- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
Re: eliminare paragrafo con sed
mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.localmauro ha scritto:@mario: magari il testo da eliminare e' localizzato su righe diverse da file a file, e se sono tanti non e' il caso di editarli uno per uno.
@submax82: non ho capito... non e' che puoi postare un esempio? il testo e' sempre lo stesso o lo identifichi in base a qualcosa di specifico?
mi piacerebbe un metodo con sed che indichi proprio espressamente il paragrafo da eliminare... non mi piace la soluzione a base del numero di riga...## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: eliminare paragrafo con sed
Te l'ha detto Mario soprasubmax82 ha scritto:mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.localmauro ha scritto:@mario: magari il testo da eliminare e' localizzato su righe diverse da file a file, e se sono tanti non e' il caso di editarli uno per uno.
@submax82: non ho capito... non e' che puoi postare un esempio? il testo e' sempre lo stesso o lo identifichi in base a qualcosa di specifico?
mi piacerebbe un metodo con sed che indichi proprio espressamente il paragrafo da eliminare... non mi piace la soluzione a base del numero di riga...## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi
sed -e '/## Added by Gnome-Slacky 2.20.3 ##/,+3d' rc.local
- submax82
- Staff
- Messaggi: 3202
- Iscritto il: mer 31 ago 2005, 0:00
- Desktop: xfce
- Distribuzione: SalixOS
- Contatta:
Re: eliminare paragrafo con sed
non c'è una soluzione che mi permette di indicare proprio la stringa esatta ? senza +3 ecc... (anche quella però pensandoci non è male...)
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: eliminare paragrafo con sed
Indenti piu` stringhe penso.submax82 ha scritto:non c'è una soluzione che mi permette di indicare proprio la stringa esatta ? senza +3 ecc... (anche quella però pensandoci non è male...)
Rileggi il mio post precedente, mettile in un file.
Mario Vanoni
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: eliminare paragrafo con sed
Rileggendo il tuo post mi è venuto un dubbio.Mario Vanoni ha scritto: Rileggi il mio post precedente, mettile in un file.
tu dici
e primaATTENTI: con frasi uguali in il_file_che_vuoi, GUAI IN VISTA !!!
Se devo specificare riga per riga, mi toglie tutte le righeUn file con tutto il testo che vuoi eliminare,
ad ogni riga aggiungi all'inizio
/^
alla fine della riga
$/d
chiamalo magari file.sed
poi
sed -f file.sed il_file_che_vuoi
Codice: Seleziona tutto
fi
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: eliminare paragrafo con sed
Vuoi eliminare tutte le righe tra "## Added.." e il primo "fi"? Ora ho da fare, se nessuno ti posta la soluzione, più tardi lo faccio io. Si può fare, e sul forum ci dovrebbe essere un altro thread in cui ho dato la stessa risposta. Prova a cercare....submax82 ha scritto:...
## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- targzeta
- Iper Master
- Messaggi: 6629
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: eliminare paragrafo con sed
La seguente regola, dice a sed di eliminare tutte le righe tra "## Added by Gnome-Slacky 2.20.3 ##" e il primo "fi" che incontra.
Il man dovrebbe essere sufficiente a farti capire la regola, altrimenti chiedi pure. Ricorda che sed è un automa e quindi fa esattamente quello che gli si chiede, l'importante è chiedergli le cose giuste .
Spina
Codice: Seleziona tutto
sed -n '/## Added by Gnome-Slacky 2.20.3 ##/{n;b BECCATO;};p;d;:BECCATO /fi/d;;n;b BECCATO' nome_file
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Packager
- Messaggi: 1339
- Iscritto il: sab 27 mar 2004, 0:00
- Slackware: current
- Desktop: fluxbox.git
- Località: Collegno, but made in Friûl
- Contatta:
Re: eliminare paragrafo con sed
E' possibile anche affidandosi a grep per determinare la riga in cui inizia il paragrafo.
è chiaro che dipende da quanto sarà diverso quel blocco di codice nelle future implementazioni. Se finirà sempre per "fi" la soluzione di Spina è certamente la migliore, altrimenti puoi optare per qualcosa che individui la sola dimensione del paragrafo a partire dalla sua prima riga. Poi, non sono un coder, ma riconosco che la mia stringa sia inefficiente se quel file è grosso e il paragrafo verso il fondo; in tal caso, scorporata su due comandi è più efficiente:
Codice: Seleziona tutto
sed -i `grep -n "## Added by Gnome-Slacky 2.20.3 ##"|cut -d':' -f1`,$((`grep -n "## Added by Gnome-Slacky 2.20.3 ##"|cut -d':' -f1` + 3))d nome_file
Codice: Seleziona tutto
n=`grep -n "## Added by Gnome-Slacky 2.20.3 ##"|cut -d':' -f1`
sed -i $n,$((n + 1))d nome_file
- sid77
- Linux 3.x
- Messaggi: 568
- Iscritto il: mer 1 giu 2005, 0:00
- Slackware: 12.0/12.1/curr (ppc)
- Località: PowerPC
- Contatta:
Re: eliminare paragrafo con sed
in teoria la modifica di rc.local non dovrebbe avvenire esclusivamente per mano dell'amministratore?submax82 ha scritto:mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.local
se hai bisogno di eseguire degli script all'avvio è decisamente meglio modificare rc.M e presentarlo come rc.M.new (oppure rc.S, ma non credo serva per GNOME )
ciao
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: eliminare paragrafo con sed
al primo aggiornamento di Pat gnome sparisce cosìsid77 ha scritto: in teoria la modifica di rc.local non dovrebbe avvenire esclusivamente per mano dell'amministratore?
se hai bisogno di eseguire degli script all'avvio è decisamente meglio modificare rc.M e presentarlo come rc.M.new (oppure rc.S, ma non credo serva per GNOME )
Io non farei niente, creerei un rc.gnome e poi direi all'utente di inserire quelle righe in rc.local, ma al limite mi sembra il luogo adatto visto che è "fuori" dai pacchetti di Slackware base.
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: eliminare paragrafo con sed
Esatto, per questo l'"ATTENTI"!conraid ha scritto:Rileggendo il tuo post mi è venuto un dubbio.Mario Vanoni ha scritto: Rileggi il mio post precedente, mettile in un file.
tu dicie primaATTENTI: con frasi uguali in il_file_che_vuoi, GUAI IN VISTA !!!
Se devo specificare riga per riga, mi toglie tutte le righeUn file con tutto il testo che vuoi eliminare,
ad ogni riga aggiungi all'inizio
/^
alla fine della riga
$/d
chiamalo magari file.sed
poi
sed -f file.sed il_file_che_vuoidel codice sopra, o sbaglio?Codice: Seleziona tutto
fi
O le frasi sono _uniche_, o sono GUAI.
Quindi vecchia e buona regola commentare anche il/lo "fi"
fi ## Added by ... ##
ed in C
fi /* if (quello_che vuoi == 0) */
Mario Vanoni