[bash] verifica e inserimento stringa in un file
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
è fattibile secondo te?
grazie infinite
- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
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ì:
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
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- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
allora, dimentica il post precedente perché non funziona.
Questo invece dovrebbe andare:
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-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
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
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
come posso ringraziarti?dalle mie parti si direbbe: cornetto e cappuccino è pagato:)
se avrò altri dubbi su alcune cose posso disturbarti?
thanks
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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?
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [bash] verifica e inserimento stringa in un file
Rispondo io, perché sono domande non tanto personali quanto gestite dal regolamento del forum.piccolotauro2 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582490#p4582490][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: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
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
Ni.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?
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é?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
grazie
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [bash] verifica e inserimento stringa in un file
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.
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.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [bash] verifica e inserimento stringa in un file
p.s.: come sono strutturati i file .conf?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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.

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.
- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
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
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]-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
tomm grazie mille:)spero di non avere più bisogno...ma penso sia una speranza difficile:)
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
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
- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
il contributo è volontario, per cui nessuna seccatura 
Prova questo:
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
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
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
- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
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:
Questo scompone la linea e ne stampa la prima parte solo se non comincia per #. Righe che cominciano con # sono commenti e vengono ignorati.
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}'-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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
cioè direttamente il sed praticamente
- tomm
- Scoppiettante Seguace

- Messaggi: 796
- Iscrizione: lunedì 15 ottobre 2007, 10:16
- Desktop: Gnome
- Distribuzione: Ubuntu 16.04
Re: [bash] verifica e inserimento stringa in un file
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)
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)
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
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...
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...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti