Newsgroup: it.comp.os.linux.sys
Titolo: [Programmazione bash] Eliminare testo contenuto tra tag

Salve a tutti, e'la prima volta che scrivo sul ng.
Sono utente Linux da vario tempo anche se ultimamente per vari progetti sto' 
lavorando su configurazioni miste (win/linux).
Il problema che devo risolvere, e per il quale chiedo aiuto, e' il seguente:
ho un server locale in cui ho creato vari virtual host di apache per gestire 
comodamente i vari progetti che seguo, un esempio del mio httpd.conf lo 
trovate alla fine.
La creazione degli utenti e dei relativi virtual host la faccio con uno 
script fatto da me ed ora vorrei aggiungere anche la possibilta' di 
eliminare utenti a questo script.
In particolare vorrei che chiamando "newwebuser -d nomeutente" venga 
eliminato l'utente indicato ed il relativo virtual host.
Per l'eliminazione dell'utente ho risolto facilmente ora pero' devo 
eliminare il virtual host relativo all'utente. Quindi il problema e' come 
elimino le righe contenute tra i tag <VirtualHost *:80> e </VirtualHost> 
dove la direttiva ServerName e' nomeutente?
Grazie in anticipo a tutti.
Ciao
--------------------------------
Esempio fine del httpd.conf
<VirtualHost *:80>
    ServerName server
    ServerAdmin root@localhost
    DocumentRoot /var/www/html/
</VirtualHost>
<VirtualHost *:80>
        ServerName danilobottone
        ServerAdmin root@localhost
        DocumentRoot /var/www/html/danilobottone
</VirtualHost>
-- 
Danilo Bottone
danilo...@gmail.com
www.danilobottone.com
 (.it) 

 ciao, f.
Infatti stavo studiando questa soluzione ance se nn vengo a capo della 
regexp giusta.
Non riesco a capire come fargli estrarre piu' righe dal file di testo, 
reisco solo a selezionare la riga in cui c'e' il nomeutente (ServerName).
Hai qualche suggerimento?


 Ciao
Io direi che se ricominci con un'altra filosofia fai le cose più pulite.
Mai vista la direttiva Include di apache ?
Puo includere singoli files o directory.
La usi e salvi ogni VH in unsingolo file.
Mi sembra di gran lunga la soluzione più pulita.
Max

 (ServerName). Hai qualche suggerimento?
Ho provato con:
[root@localhost ~]# cat test
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost *:80>
    ServerName server
    ServerAdmin root@localhost
    DocumentRoot /var/www/html/
</VirtualHost>
<VirtualHost *:80>
        ServerName danilobottone
        ServerAdmin root@localhost
        DocumentRoot /var/www/html/danilobottone
</VirtualHost>
[root@localhost ~]# perl -0ne 'print "$1\n" while /(<VirtualHost 
\*:80>(.*danilobottone.*)<\/VirtualHost>?)/sg' test
<VirtualHost *:80>
    ServerName server
    ServerAdmin root@localhost
    DocumentRoot /var/www/html/
</VirtualHost>
<VirtualHost *:80>
        ServerName danilobottone
        ServerAdmin root@localhost
        DocumentRoot /var/www/html/danilobottone
</VirtualHost>
Come mai mi restituisce entrambi i VirtualHost?
A me servirebbe ovviamente che mi pescasse solo il secondo, anzi no dovrebbe 
prendere tutti quelli che non contengono il secondo (cosi' riscrivo 
direttamente il file httpd.conf)
Ciao e grazie 1000 per l'aiuto



Hai ragione ci avevo pensato solo che volevo anche impratichirmi un po' con 
script bash e regex dato che tornano sempre utili.
Con include risolvo il problema ma non imparo nulla di nuovo :)
Ciao e grazie mille per la risposta.


 con script bash e regex dato che tornano sempre utili.
]zac[
Se acetti (!) un consiglio, usare gli script bash per fare elaborazioni di
testo complesse (inteso come elaborare 'informazioni' su più righe,
ricerche e sostituzioni dipendenti da testo in più punti della riga) è
andare nettamente contro la natura della bash, alla fine i risultati sono
sempre scarsi.
In sintesi programmare script bash è nel 80% dei casi trovare soluzione che
evitino situazioni complesse allo script (un file di appoggio è una
soluzione tipica e ottima).

 appoggio è una soluzione tipica e ottima).
Ti ringrazio molto ho capito, conoscendo il php abbastanza bene baste 
rinforzare un po' la preparazione sulle regex e dovrei essere a posto.
Ciao


 della regexp giusta.
Potresti provare con regexpviewer:
http://dedasys.com/freesoftware/applications.html
Quello, e altri programmi simili, sono un buon modo per sperimentare
le regexp.
-- 
David N. Welton
 - 
http://www.dedasys.com/davidw/
Apache, Linux, Tcl Consulting
 - 
http://www.dedasys.com/

 </VirtualHost>
Il problema è risolvibile solo scrivendo scrivendo del codice.
E' necessario fare la scansione del file di testo riga per riga (ridirezione
del file in un ciclo for o while o loop o sul programma awk), quando trovi
<VirtualHost *:80> salvi le righe in alcune variabili o in un file, se poi
trovi ServerName danilobottone elimini tutte le righe fino a </VirtualHost>
(naturalmente tutte le righe non eliminate devono finire nel nuovo file di
configurazione).
Fatto da bash è un po' lento, nel caso ci vogliono altri linguaggi, tipo
phyton, perl, php, ecc.

Danilo Bottone wrote:
cut
Grazie mille a tutti e' stato molto istruttivo postare qui.
Se a qualcuno interessa lo script che ho fatto potete richiedere in email, 
non e' niente di che' pero' fa il suo lavoro.
In un comando crea l'utente gli da accesso ftp aggiunge il virtual host in 
apache e se richiesto crea anche il db mysql (questo lo sto' implem ora), 
ovviamente se si usa il flag -d (delete) elimina tutto cio' che e' relativo 
all'utente indicato in input (qui sto' prevedendo di fare il backup dei 
files e del db).
Ciao a tutti.


 </VirtualHost>
Modificherei il problema. Aggiungerei all'httpd.conf una linea tipo:
Include /etc/apache2/virtualhosts/[^.#]*
e poi creerei un file "utente.conf" per ogni utente in quella dir.
Per eliminare l'utente basta cancellare il file.
.a.
-- 
Il mattino ha l'oro in bocca. Il MATTino ha l'OrO In bOcca.
i lma tt ino ha l'o roin bocc a.ilmattinohal'oroinbocca. il ma tt in
oh al' or oi nb oc ca. il matti noha l'oroinbocca. IL MATtiNO Ha l'ORO
InBOCCa. I l m a t t i n o  h a l' o r o i n b o c c a . ilmattinohal'oroin
BoCcA. iLmAtTiNoHaL'oRoInBoCcA.


ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org
mailto:
lar...@perl.it
   |  
http://www.perl.it

 Come mai mi restituisce entrambi i VirtualHost?
Perche` .* signfica "prendi il mondo"
Henryx