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.
Rispondi
samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 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

Messaggio da samiel »

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: 6628
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: Aggiunta di una riga con sed

Messaggio da targzeta »

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

albatrosla
Packager
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: Aggiunta di una riga con sed

Messaggio da albatrosla »

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: 5511
Iscritto il: ven 16 gen 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

Messaggio da samiel »

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: 6628
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: Aggiunta di una riga con sed

Messaggio da targzeta »

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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 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

Messaggio da samiel »

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.x
Linux 2.x
Messaggi: 336
Iscritto il: mar 30 ott 2012, 11:17
Slackware: 14.2
Desktop: xfce, fluxbox

Re: Aggiunta di una riga con sed

Messaggio da Linpassion »

nn so se puo funzionanre una cosa tipo

echo stringa da aggiungere >> nome del file

Rispondi