PDA

Visualizza la versione completa : Eliminare una riga da un file usando bash


daniele_dll
18-07-2004, 11:06
ola

spero di nn aver sbagliato posto ^^
il mio problema il seguente:

sto creando un set di script per gestirmi i vhosts di apache, quindi creazione\eliminazione di un dominio e creazione\eliminazione di un sottodominio

Tutto funziona perfettamente...ed ho la lista di siti web esistenti (quindi coppia sottodominio+dominio) in un file che includo nel file di config di apache. In questo file ci stanno una serie di include che si richiamano i file che contengono le singole direttive di vhosts per i vari siti

nello specifico ho il problema li...
quando elimino un sotto dominio, dopo che elimino tutti i file e la conf inenerente a lui devo eliminare anche la riga da li e poi restartare apache...ovviamente restartare apache nn un problema, ma eliminare la riga lo :\

ho provato con un


for LINE in `cat /path/to/web_site_list`; do
echo ${LINE}
done


e mi fa la separazione sia per gli spazi sia per le righe...in pratica stampa qualcosa del genere



Include
conf/web_sites/xyz.com__www
Include
conf/web_sites/xyz.com__admin
Include
conf/web_sites/xyz.com__stats
Include
conf/web_sites/xyz.com__webmail
Include
conf/web_sites/test.com__www


il file in realt di questo tipo...



Include conf/web_sites/xyz.com__www
Include conf/web_sites/xyz.com__admin
Include conf/web_sites/xyz.com__stats
Include conf/web_sites/xyz.com__webmail
Include conf/web_sites/test.com__www


a me interessa, in questo caso specifico eliminare il sotto dominio www.test.com (che presente nell'ultima riga)

come posso fare? devo usare ad es sed o awk? o non c'entra niente?

gracias a todos :)

Ikitt
18-07-2004, 11:13
Originariamente inviato da daniele_dll

[...]
nello specifico ho il problema li...
quando elimino un sotto dominio, dopo che elimino tutti i file e la conf inenerente a lui devo eliminare anche la riga da li e poi restartare apache...ovviamente restartare apache nn un problema, ma eliminare la riga lo :\
[...]
il file in realt di questo tipo...



Include conf/web_sites/xyz.com__www
Include conf/web_sites/xyz.com__admin
Include conf/web_sites/xyz.com__stats
Include conf/web_sites/xyz.com__webmail
Include conf/web_sites/test.com__www

a me interessa, in questo caso specifico eliminare il sotto dominio www.test.com (che presente nell'ultima riga)


Io direi:



$ cat test.txt
Include conf/web_sites/xyz.com__www
Include conf/web_sites/xyz.com__admin
Include conf/web_sites/xyz.com__stats
Include conf/web_sites/xyz.com__webmail
Include conf/web_sites/test.com__www
$ sed /test.com/d < test.txt > test.txt.new
$ mv test.txt test.txt.old
$ mv test.txt.new test.txt
$ cat test.txt
Include conf/web_sites/xyz.com__www
Include conf/web_sites/xyz.com__admin
Include conf/web_sites/xyz.com__stats
Include conf/web_sites/xyz.com__webmail
$ cat test.txt.old
Include conf/web_sites/xyz.com__www
Include conf/web_sites/xyz.com__admin
Include conf/web_sites/xyz.com__stats
Include conf/web_sites/xyz.com__webmail
Include conf/web_sites/test.com__www


Dovrebbe andar bene.

daniele_dll
18-07-2004, 11:14
fatto...ho appena risolto :D

per chi fosse interessato...
http://unix.about.com/library/weekly/aa031802a.htm

qui c' una guida veramente basilare ma molto comoda ^^
ciauz

daniele_dll
18-07-2004, 11:15
Originariamente inviato da Ikitt
[...]

Dovrebbe andar bene.

doh...avevo appena risolto :DDD
cmq grazie tante!

Ikitt
18-07-2004, 11:15
Originariamente inviato da daniele_dll
fatto...ho appena risolto :D


'Azz sono arrivato secondo... :incupito:

Vabbeh, l'importante e` che tu abbia risolto :zizi:

:ciauz:

Ilmalcom
18-07-2004, 11:15
La soluzione di Ikitt corretta, ma applicabile solo in questo caso specifico. Se il problema pi ampio, devi darci dei particolari in pi. Vuoi eliminare una generica linea? Vuoi eliminare solo l'ultima? O va bene cos?

Ilmalcom
18-07-2004, 11:16
letto ora pure io :nonlodire

gianiaz
18-07-2004, 11:17
puoi passare da un file temporaneo per poi sostituirlo:


awk 'match($0,"frase da cancellare") == 0 {print $0}' fileorigine > filetemporaneo
mv filetemporaneo filedestinazione


per quanto riguarda l'esempio che facevi, il motivo la bash ha una variabile chiamata IFS che viene utilizzata come separatore, e che di default lo spazio.
non ho mai provato ad assegnarle come valore l'invio, ma dovrebbe funzionare....







non ci credo, ho dato una risposta a daniele_dll!!! :yuppi:

gianiaz
18-07-2004, 11:17
ma cazzo in 10 minuti millemilioni di risposte.... :cry:

daniele_dll
18-07-2004, 11:29
mmm mi interessava sapere solo come si eliminava :DDD
lo scripting bash un po lo conosco x questo nn ho dato + particolari :P

nel mio codice, ovviamente, a test.com__www sono andato a sostituire delle var che prendo dallo standard input :)

ora devo solo fare le interfacce usando le dialog utils...sar troppo divertente :fighet:

ciauz e graziez

@gianiaz:
grazie, non sapevo la variabile che stabiliva la separazione, avevo pure provato usando $\ che quella perl (in disperazione si prova di tutto) xo alla fine stato meglio scoprirlo dopo...almeno ho scoperto a cosa serve sed e l'ho imparato ad usare un pochettino :D



non ci credo, ho dato una risposta a daniele_dll!!!

:master:

PS: sed usa le PCRE (Perl Compatible Regular Expression) giusto? ho visto che mette due caratteri...uno di inizio ed un terminatore e poi i modificatori prima e dopo (in base a cosa servono) e se si usa il modificatore s c' il contenuto da sostituire giusto?

Loading