Pagina 2 di 4
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 11:23
da piccolotauro2
grazie mille e scusa....senti e per la verifica invece?nel senso prima di inserire il nodo con l'attributo vorrei verificare prima se c'è il nodo e poi, se il nodo c'è inserire l'attributo...
è fattibile secondo te?
grazie infinite
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 13:16
da tomm
Ho fatto un po' di prove e sembra essere problematico il caso quando il nodo esiste ma senza attributo. Cmq è sicuramente fattibile
Intanto, per verificare se il nodo esiste o meno puoi fare così:
Codice: Seleziona tutto
xmlstarlet sel -t -v "/Context/Manager" conf/context.xml
if [ $? = 0 ];then
NODE_EXISTS=true
else
NODE_EXISTS=false
fi
un chiarimento a proposito della tua domanda di prima, /Context/Manager oppure solo Manager: devi includere anche /Context perché si tratta non di una semplice stringa da cercare ma di una espression XPATH:
http://www.w3schools.com/xpath/xpath_syntax.asp
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 14:02
da tomm
allora, dimentica il post precedente perché non funziona.
Questo invece dovrebbe andare:
Codice: Seleziona tutto
FILE="conf/context.xml"
NODE=$(xmlstarlet el -a $FILE | grep -w "Context/Manager")
if [ "$NODE" = "" ];then
xmlstarlet ed -L --subnode "/Context" --type elem -n Manager -v "" $FILE
fi
ATTRIBUTE=$( xmlstarlet el -a $FILE | grep -w "Context/Manager/@randomClass")
if [ "$ATTRIBUTE" = "" ];then
# aggiungi attributo
xmlstarlet ed -L -i '/Context/Manager' -t attr -n randomClass -v java.security.SecureRandom $FILE
else
# aggiorna attributo già esistente
xmlstarlet ed -L -u '/Context/Manager/@randomClass' -v java.security.SecureRandom $FILE
fi
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 15:41
da piccolotauro2
lo proverò a brevissimo e sa va ti devo una statua in oro massiccio:)
nel frattempo ho provato il comando semplice di inserimento dell'attributo <Manager e dell'elemento.
Dopo che lo lancio a schermo mi fa vedere il risultato ed è corretto.
Ma se vado vedere il file con un banale cat la modifica non c'è...dovrei salvare il file in qualche modo praticamente per rendere effettiva la modifica?
grazie
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 15:46
da piccolotauro2
ho provato lo script che mi hai mandato e funziona...

come posso ringraziarti?dalle mie parti si direbbe: cornetto e cappuccino è pagato:)
se avrò altri dubbi su alcune cose posso disturbarti?
thanks
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 15:59
da piccolotauro2
per esempio una domanda già ce l'ho....nel mio caso si trattava di file xml ma laddove non fosse stato un xml avrei dovuto usare comandi tipo sed e awk?
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 16:18
da vaeVictis
Rispondo io, perché sono domande non tanto personali quanto gestite dal regolamento del forum.
Come ringraziare? Usando i tag per il codice e mettendo risolto nel titolo del primo messaggio della discussione

Qualora ci fossero altri dubbi, non disturbi, ma apri una discussione pubblica, non mandare messaggi privati: non è lo spirito del forum
piccolotauro2 ha scritto:per esempio una domanda già ce l'ho....nel mio caso si trattava di file xml ma laddove non fosse stato un xml avrei dovuto usare comandi tipo sed e awk?
Ni.
Nel senso che se è un altro linguaggio analogo all'xml si usa un qualche parser apposito.
Anche in questo caso, comunque, era possibile farlo senza usare parser ma solamente bash, sed, awk e compagnia... ma la domanda è... perché?
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 16:24
da piccolotauro2
hai ragione tra l'altro con sed e awk sarebbe stato un inferno perché andavano fatti 3mila controlli...ho fatto questa domanda perché perché avrò un caso analogo ma con un file non xml ma .conf....e quindi volevo capire una possibile soluzione generale
grazie
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 16:28
da vaeVictis
No, a dire il vero bastava che ti segnavi la riga eventualmente trovata con grep.
Poi dallo stato di uscita di grep vedevi se la riga era stata trovata. Se era stata trovata, sapevi direttamente dove andare a modificare in base alla riga sostituita.
Altrimenti sapevi che non era stato trovato e te la giocavi facile.
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 16:30
da vaeVictis
p.s.: come sono strutturati i file .conf?
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 16:44
da piccolotauro2
fondamentalmente ne ho aperto uno e hanno più o meno la stessa struttura di un file xml per cui si potrebbero adattare musa...devo sicuro controllare...
il discorso che dicevo io della difficoltà era legata ai controlli di esistenza ma poi anche ai tag di apertura e di chiusura che complicavano un po le cose perché andava sempre controllato se c'erano e dopo in caso inserirli...
comunque mi sto leggendo la tua risp di prima e mi sono un po perso a:
Poi dallo stato di uscita di grep vedevi se la riga era stata trovata. Se era stata trovata, sapevi direttamente dove andare a modificare in base alla riga sostituita.

Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 21:03
da tomm
file con estensione conf possono essere tranquillamente xml, indipendentemente dall'estensione.
Per verificare se un file (con qualsiasi estensione) è un xml o meno ti basta questo comando
Codice: Seleziona tutto
xmlstarlet val -w [NOME FILE COMPLETO DI ESTENSIONE]
Re: [bash] verifica e inserimento stringa in un file
Inviato: mercoledì 14 maggio 2014, 22:11
da piccolotauro2
tomm grazie mille:)spero di non avere più bisogno...ma penso sia una speranza difficile:)
Re: [bash] verifica e inserimento stringa in un file
Inviato: giovedì 15 maggio 2014, 10:59
da piccolotauro2
potreste suggerirmi anche la procedura senza xmlstarlet?purtroppo mi trovo nella situazione di una modifica di un file non xml e dovrei fare l'identica cosa...cioè verificare se c'è una stringa e in caso contario inserirla...cioè devo Verificare che nel file di configurazione logging.properties siano stati definiti
java.util.logging.FileHandler.limit=10000000
e
java.util.logging.FileHandler.count=5
quindi dovrei controllare se non ci sono le stringhe e in caso contrai o inserirle
e fondamentalmente non è importante dove le inserisce....
scusate la seccatura...
grazie
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 8:00
da tomm
il contributo è volontario, per cui nessuna seccatura
Prova questo:
Codice: Seleziona tutto
# PERSONALIZZA QUI: sostituisci TUO_FILE con il nome del tuo file
FILE=TUO_FILE
set_property(){
PROP="$1"
VALUE="$2"
PROP_FOUND=$(awk -F '=' '{ if(substr($1, 0, 1) != "#") print $1}' $FILE|awk /$PROP/ )
if [ "$PROP_FOUND" = "" ];then
echo "$PROP=$VALUE" >> $FILE
else
sed -i "s#^ *$PROP *=.*\$#$PROP=$VALUE#g" $FILE
fi
}
set_property "java.util.logging.FileHandler.limit" "10000000"
set_property "java.util.logging.FileHandler.count" "5"
# .....
# qui puoi aggiungere altre property
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 9:49
da piccolotauro2
tomm funziona alla perfezione....è impressionante:) grazie all'infinito...
giusto per capire...
in pratica set property è una funziona che riesce a scomporre la stringa in prop e value assegnando quindi a prop il valore che voglio?
grazie infinite
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 12:13
da tomm
si, la funzione richiama prima awk per verificare se la property già esiste e poi sed per aggiungerla o per correggere quella già esistente.
Praticamente awk scompone le linee in prop e value usando in segno uguale come delimitatore:
Codice: Seleziona tutto
awk -F '=' '{ if(substr($1, 0, 1) != "#") print $1}'
Questo scompone la linea e ne stampa la prima parte solo se non comincia per #. Righe che cominciano con # sono commenti e vengono ignorati.
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 12:27
da piccolotauro2
perfetto e nel caso non ci fosse stato l'uguale?= nel senso se non c'era il delimitatore andava fatta solo una verifica sulla esistenza della stringa totale?
cioè direttamente il sed praticamente
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 13:20
da tomm
ovviamente se non c'è l'uguale si fa in un altro modo, ma questo è un property file di una applicazione in java e deve rispettare delle regole precise.
Praticamente la domanda "nel caso non ci fosse stato l'uguale" non ha senso, perché se non c'è l'uguale si tratta di un altro tipo di file e il problema va risolto in maniera diversa.
Non puoi fare uno script che va bene per tutti i casi possibili, perché i casi possibili sono infiniti (o quasi)
Re: [bash] verifica e inserimento stringa in un file
Inviato: venerdì 16 maggio 2014, 14:18
da piccolotauro2
chiarissimo...
nel caso in cui fosse stato di verificare che ci fosse:
SSLProtocol - ALL +TLSv1
pensavo bastava inserire direttamente il sed
volevo farmi una idea....tra l'altro in questo caso ci sonda anche più spazi quindi non si può sostituire l'uguale con lo spazio vuoto...