Repository 32bit  Forum
Repository 64bit  Wiki

eliminare paragrafo con sed

Forum dedicato alla programmazione.

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.

eliminare paragrafo con sed

Messaggioda submax82 » mar gen 22, 2008 14:59

tutte le volte che utilizzo sed per cose che non siano banali ci litigo! :D

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...
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: eliminare paragrafo con sed

Messaggioda Mario Vanoni » mar gen 22, 2008 15:38

submax82 ha scritto:tutte le volte che utilizzo sed per cose che non siano banali ci litigo! :D

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...


UNIX KISS rule

[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
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: eliminare paragrafo con sed

Messaggioda mauro » mar gen 22, 2008 18:21

@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?
Avatar utente
mauro
Linux 2.4
Linux 2.4
 
Messaggi: 281
Iscritto il: gio mag 11, 2006 20:51
Slackware: current
Kernel: uno degli ultimi...
Desktop: dwm

Re: eliminare paragrafo con sed

Messaggioda Mario Vanoni » mar gen 22, 2008 19:23

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?


Hai ragione mauro,
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
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: eliminare paragrafo con sed

Messaggioda submax82 » mar gen 22, 2008 21:55

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?


mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.local

## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi


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...
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: eliminare paragrafo con sed

Messaggioda conraid » mar gen 22, 2008 22:18

submax82 ha scritto:
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?


mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.local

## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi


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...


Te l'ha detto Mario sopra
sed -e '/## Added by Gnome-Slacky 2.20.3 ##/,+3d' rc.local
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: eliminare paragrafo con sed

Messaggioda submax82 » mar gen 22, 2008 22:35

non c'è una soluzione che mi permette di indicare proprio la stringa esatta ? senza +3 ecc... (anche quella però pensandoci non è male...)
Avatar utente
submax82
Staff
Staff
 
Messaggi: 3202
Iscritto il: mar ago 30, 2005 23:00
Desktop: xfce
Distribuzione: SalixOS

Re: eliminare paragrafo con sed

Messaggioda Mario Vanoni » mar gen 22, 2008 22:51

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...)


Indenti piu` stringhe penso.

Rileggi il mio post precedente, mettile in un file.

Mario Vanoni
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: eliminare paragrafo con sed

Messaggioda conraid » mar gen 22, 2008 22:55

Mario Vanoni ha scritto:Rileggi il mio post precedente, mettile in un file.


Rileggendo il tuo post mi è venuto un dubbio.
tu dici
ATTENTI: con frasi uguali in il_file_che_vuoi, GUAI IN VISTA !!!


e prima

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


Se devo specificare riga per riga, mi toglie tutte le righe
Codice: Seleziona tutto
fi

del codice sopra, o sbaglio?
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: eliminare paragrafo con sed

Messaggioda targzeta » mer gen 23, 2008 7:33

submax82 ha scritto:...
## Added by Gnome-Slacky 2.20.3 ##
if [ -x /etc/rc.d/rc.gnome ]; then
. /etc/rc.d/rc.gnome
fi


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....

Spina
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: eliminare paragrafo con sed

Messaggioda targzeta » mer gen 23, 2008 8:00

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.

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


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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: eliminare paragrafo con sed

Messaggioda albatrosla » mer gen 23, 2008 9:41

E' possibile anche affidandosi a grep per determinare la riga in cui inizia il paragrafo.
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

è 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
n=`grep -n "## Added by Gnome-Slacky 2.20.3 ##"|cut -d':' -f1`
sed -i $n,$((n + 1))d nome_file
albatrosla
Packager
Packager
 
Messaggi: 1294
Iscritto il: sab mar 27, 2004 0:00
Località: Bressa - Friuli / Torino
Slackware: current
Desktop: fluxbox.git

Re: eliminare paragrafo con sed

Messaggioda sid77 » mer gen 23, 2008 12:23

submax82 ha scritto:mi serve nella rimozione di gslacky per rimuovere queste righe da /etc/rc.d/rc.local

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 ;-) )

ciao
Avatar utente
sid77
Linux 2.6
Linux 2.6
 
Messaggi: 568
Iscritto il: mar mag 31, 2005 23:00
Località: PowerPC
Slackware: 12.0/12.1/curr (ppc)

Re: eliminare paragrafo con sed

Messaggioda conraid » mer gen 23, 2008 12:29

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 ;-) )


al primo aggiornamento di Pat gnome sparisce così :-)
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.
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: eliminare paragrafo con sed

Messaggioda Mario Vanoni » mer gen 23, 2008 14:37

conraid ha scritto:
Mario Vanoni ha scritto:Rileggi il mio post precedente, mettile in un file.


Rileggendo il tuo post mi è venuto un dubbio.
tu dici
ATTENTI: con frasi uguali in il_file_che_vuoi, GUAI IN VISTA !!!


e prima

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


Se devo specificare riga per riga, mi toglie tutte le righe
Codice: Seleziona tutto
fi

del codice sopra, o sbaglio?


Esatto, per questo l'"ATTENTI"!

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
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: TurnitinBot [Bot] e 1 ospite