Aggiunta di una riga 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.
samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven gen 16, 2004 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Aggiunta di una riga con sed

Messaggioda samiel » ven nov 05, 2010 23:34

Devo aggiungere la riga
Map ulg.map
al file /usr/local/texlive/texmf-local/web2c/updmap-local.cfg
Mi va benissimo che la piazzi alla fine.
Posto che prima ho messo
BASEDIR=/usr/local/texlive/texmf-local
la stringa
sed -i 's/Map ugl.map/' $BASEDIR/web2c/updmap-local.cfg
mi dà errore:
sed: espressione -e #1, carattere 14: comando `s' non terminato
Dove ho sbagliato?
Grazie
M.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6388
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Aggiunta di una riga con sed

Messaggioda targzeta » sab nov 06, 2010 2:00

Il comando 's' di sed sta per 'sostituisci', tu non li hai detto di sostituire niente. Se vuoi semplicemente aggiungere la riga alla fine del file puoi anche usare:

Codice: Seleziona tutto

echo 'Map ulg.map' >> $BASEDIR/web2c/updmap-local.cfg
non vedo perchè disturbare sed ;).

Emanuele
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à 

albatrosla
Packager
Packager
Messaggi: 1294
Iscritto il: sab mar 27, 2004 0:00
Slackware: current
Desktop: fluxbox.git
Località: Bressa - Friuli / Torino
Contatta:

Re: Aggiunta di una riga con sed

Messaggioda albatrosla » sab nov 06, 2010 11:13

Rispondo comunque per completezza, visto che la necessità di inserire una riga in fondo al file - come dice spina - la soddisfi già con l'operatore ">>".
Per aggiungere delle righe con sed devi usa il comando append "a" o il comando insert "i" invece del comando sostituisci "s".
Dunque la sintassi è la seguente:

Codice: Seleziona tutto

sed -i '<NN>a <STRING>'

Dove a <NN> va sostituito il numero di riga, oppure un pattern da individuare nel file. Esempi pratici applicati ad un file del tipo:

Codice: Seleziona tutto

10
20
30

sed -i '1a STRINGA' produce:

Codice: Seleziona tutto

10
STRINGA
20
30

sed -i '1i STRINGA' produce:

Codice: Seleziona tutto

STRINGA
10
20
30

sed -i '/10/a STRINGA' produce:

Codice: Seleziona tutto

10
STRINGA
20
30

E via dicendo...
In questo specifico caso, <NN> posto pari a $ indica l'ultima riga del file.

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven gen 16, 2004 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Aggiunta di una riga con sed

Messaggioda samiel » mar nov 09, 2010 0:31

Sì, poi mi ero accorto della cavolata che avevo fatto.
E inoltre mancava il reindirizzamento al file.
Solo una cosa, tanto per complicare un po' le cose:
se volessi in pratica dire:
aggiungi questa riga, se no c'è già?
Nel senso che, dovendo ad es reinstallare un font,
mi troverei il file di configurazione con tante righe
uguali quante reinstallazioni ho fatto..

Mille grazie
M.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6388
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Aggiunta di una riga con sed

Messaggioda targzeta » mar nov 09, 2010 1:03

Ti posto due modi:

Codice: Seleziona tutto

! grep -q stringa_da_cercare nome_file && echo stringa_da_inserire >> nome_file
mentre con sed:

Codice: Seleziona tutto

sed -i '/stringa_da_cercare/b found;$a\
stringa_da_inserire
p;d;:found n; b found' nome_file


Emanuele
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à 

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven gen 16, 2004 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Aggiunta di una riga con sed

Messaggioda samiel » mer nov 10, 2010 20:43

Ottima la prima, visto che all afine avevo fatto con echo
E buona a sapersi la seconda...

Milla grazie
M.

Avatar utente
Linpassion
Linux 2.0
Linux 2.0
Messaggi: 141
Iscritto il: mar ott 30, 2012 11:17
Slackware: 14.0
Kernel: 3.2.9-smp
Desktop: fluxbox

Re: Aggiunta di una riga con sed

Messaggioda Linpassion » mer set 07, 2016 19:06

nn so se puo funzionanre una cosa tipo

echo stringa da aggiungere >> nome del file


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti