[bash] verifica e inserimento stringa in un file
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
[bash] verifica e inserimento stringa in un file
Ciao a tutti,
è la prima volta che scrivo nel forum ed ho proprio bisogno di aiuto.
Deco realizzare uno script bash che verifichi se all'interno di un file c'è una stringa e in caso contrario la inserisca.
Nello specifico devo verificare che:
nel file /conf/context.xml sia presente la seguente direttiva:
<Manager ... randomClass="java.security.SecureRandom" />
potreste darmi qualche dritta su come automatizzare questo?nel senso ciò che dovrei fare è:
1-cercare il file con percorso /conf/context.xml
2-scorrerlo
3-trovare <Manager
4-vedere se al suo interno c'è randomClass="java.security.SecureRandom" />
5-se non c'è inserirla nel file
6-salvare il file
spero tanto in un vostro aiuto
grazie mille
è la prima volta che scrivo nel forum ed ho proprio bisogno di aiuto.
Deco realizzare uno script bash che verifichi se all'interno di un file c'è una stringa e in caso contrario la inserisca.
Nello specifico devo verificare che:
nel file /conf/context.xml sia presente la seguente direttiva:
<Manager ... randomClass="java.security.SecureRandom" />
potreste darmi qualche dritta su come automatizzare questo?nel senso ciò che dovrei fare è:
1-cercare il file con percorso /conf/context.xml
2-scorrerlo
3-trovare <Manager
4-vedere se al suo interno c'è randomClass="java.security.SecureRandom" />
5-se non c'è inserirla nel file
6-salvare il file
spero tanto in un vostro aiuto
grazie mille
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: [bash] verifica e inserimento stringa in un file
Ciao! Due domande:
1)
2)
1)
questa stringa è sempre sulla stessa riga di <Manager o può anche essere in righe successive? E se può essere in righe successive, c'è un limite massimo di righe da guardare o bisogna andare fino alla fine del file/fino a un certo carattere delimitatore?piccolotauro2 ha scritto:4-vedere se al suo interno c'è randomClass="java.security.SecureRandom" />
2)
dove? All'inizio, alla fine, in mezzo, a un numero di riga particolare?piccolotauro2 ha scritto:5-se non c'è inserirla nel file
"I find your lack of faith disturbing."
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
Innanzitutto grazie infinite per la risp
Allora:
Ciao! Due domande:
La stringa non è sempre sulla stessa riga di <Manager e può anche essere in righe successivese, potrebbero anche essere due elementi manager e in questo caso andrebbe aggiunta la scritta in ognuno di questi per cui il file andrebbe fatto scorrere tutto
2dove? All'inizio, alla fine, in mezzo, a un numero di riga particolare?
Andrebbe bene anche nella riga sotto all'elemento manager
Spero tu mi possa aiutare e davvero grazie
Allora:
Ciao! Due domande:
La stringa non è sempre sulla stessa riga di <Manager e può anche essere in righe successivese, potrebbero anche essere due elementi manager e in questo caso andrebbe aggiunta la scritta in ognuno di questi per cui il file andrebbe fatto scorrere tutto
2dove? All'inizio, alla fine, in mezzo, a un numero di riga particolare?
Andrebbe bene anche nella riga sotto all'elemento manager
Spero tu mi possa aiutare e davvero grazie
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
help me please:(
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: [bash] verifica e inserimento stringa in un file
Scusa, non sono sicuro di avere capito bene come devono essere apportate le modifiche.. potresti postare un (corto) file di esempio in cui mostri il contenuto del file prima e dopo aver effettuato l'inserimento, in modo da vedere tutti i possibili casi?
"I find your lack of faith disturbing."
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
Il file è abbastanza lungo ed è un XML quindi lo script dovrebbe verificare se c'è la stringa ed eventualmente inserirla come attributo
-
1001001
- Entusiasta Emergente

- Messaggi: 1506
- Iscrizione: mercoledì 22 dicembre 2010, 18:09
- Desktop: Unity
- Distribuzione: Ubuntu 14.04.1 LTS 64bit
- Località: Verona
Re: [bash] verifica e inserimento stringa in un file
Non sono sparito eh, ci sto pensando...ma bash non mi sembra lo strumento più adatto per farlo, sinceramente...deve proprio essere bash o può essere anche qualcos'altro?
se è lungo, taglialo e posta solo la parte che mostra un esempio di quello che vorresti fare...
Per questo dicevo di postare un file cortopiccolotauro2 ha scritto:Il file è abbastanza lungo ed è un XML quindi lo script dovrebbe verificare se c'è la stringa ed eventualmente inserirla come attributo
"I find your lack of faith disturbing."
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
purtroppo se si può fare (e dicono si possa fare) lo devo fare con bash.
allora immagina il file context.xml così:
............
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
<Manager ... />
...........
che dovrebbe fare lo script:
scorrere tutto il file xml, una volta trovato <Manager verificare che non ci sia randomClass="java.security.SecureRandom" /> e nel caso non ci sia inserirlo,
per avere una cosa del genere:
....................
<Manager
randomClass="java.security.SecureRandom" />
forse la cosa migliore sarebbe:
1-cercare randomClass="java.security.SecureRandom" />
2- se non c'è cercare <Manager e se c'è inserire nella riga sotto
tra l'altro più scrivo e più dubbi mi vengono...perche in realtà potrebbe non esserci neanche <Manager e toccherebbe inserire pure quello
che casino:(
allora immagina il file context.xml così:
............
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
<Manager ... />
...........
che dovrebbe fare lo script:
scorrere tutto il file xml, una volta trovato <Manager verificare che non ci sia randomClass="java.security.SecureRandom" /> e nel caso non ci sia inserirlo,
per avere una cosa del genere:
....................
<Manager
randomClass="java.security.SecureRandom" />
forse la cosa migliore sarebbe:
1-cercare randomClass="java.security.SecureRandom" />
2- se non c'è cercare <Manager e se c'è inserire nella riga sotto
tra l'altro più scrivo e più dubbi mi vengono...perche in realtà potrebbe non esserci neanche <Manager e toccherebbe inserire pure quello
che casino:(
- 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
Certo che si può fare.piccolotauro2 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582203#p4582203][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:purtroppo se si può fare (e dicono si possa fare) lo devo fare con bash.
[...]
Con "lo devo fare con bash" intendi che puoi o che non puoi usare strumenti (bash) tipo awk, sed e compagnia bella?
Per il resto del messaggio, un paio di chiarimenti.
1) Tu devi sempre e solo controllare la presenza della stringa che inizia con (per separare il codice dal resto del messaggio, usa l'apposito tag dell'editor del forum)
Codice: Seleziona tutto
<Manager2) Stessa domanda per la stringa che devi eventualmente inserire. Immagino non sia sempre
Codice: Seleziona tutto
randomClass="java.security.SecureRandom" />3) Qualora non trovassi la riga cercata e la dovessi inserire, ti interessa una particolare posizione (sia per siga sia per riferimento a qualche tag che venga prima o dopo la riga in cui viene scritta l'apertura dal tuo comando)?
Se ti interessa, si può impostare, ma il programma deve rileggere il file e quindi rallenta.
Se non ti interessa la metti direttamente alla fine del file.
Infine, tornando all'uso di bash... ma l'uso di qualche libreria per il parsing xml?
No?
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.»
- 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
ti consiglio di usare xmlstarlet.
Ad esempio, con questo comando puoi verificare la presenza dell'attributo randomClass nell'elemento /Context/Manager:
Ad esempio, con questo comando puoi verificare la presenza dell'attributo randomClass nell'elemento /Context/Manager:
Codice: Seleziona tutto
xmlstarlet sel -t -m "/Context/Manager" -v "@randomClass" conf/context.xml-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
Grazie a tutti per l'aiuto...
1) Tu devi sempre e solo controllare la presenza della stringa che inizia con (per separare il codice dal resto del messaggio, usa l'apposito tag dell'editor del forum)
Codice: Seleziona tutto
<Manager
o devi poter controllare la presenza di una stringa che inizi con la apertura di un generico tag che magari vuoi passare al comando, onde avere il tutto più generico?
non ho ben capito la domanda comunque devo verificare che ci sia l'attributo <Manager se c'è devo verificare se c'è randomClass e se non c'è inserirlo...potrebbe anche non esserci <Manager e quindi dovrei inserire sia <Manager che random class.Potrebbero anche esserci due o tre <Manager e quindi dovrei inserire random class per ogni <Manager
2) Stessa domanda per la stringa che devi eventualmente inserire. Immagino non sia sempre
Codice: Seleziona tutto
randomClass="java.security.SecureRandom" />
... in cui presumo che il token di chiusura del tag magari non lo inserisci, nel caso in cui ci sia già il tag di apertura (e quindi presumo già anche quello di chiusura).
esattamente il tag di chiusura si dovrebbe verificare se c'è gia.
3) Qualora non trovassi la riga cercata e la dovessi inserire, ti interessa una particolare posizione (sia per siga sia per riferimento a qualche tag che venga prima o dopo la riga in cui viene scritta l'apertura dal tuo comando)?
Se ti interessa, si può impostare, ma il programma deve rileggere il file e quindi rallenta.
Se non ti interessa la metti direttamente alla fine del file.
puo anche essere messa alla fine l'importante è che si rispetti la sintassi del file xml
Infine, tornando all'uso di bash... ma l'uso di qualche libreria per il parsing xml?
No?
si potrebbe usare anche il parse se semplifica le cose...tu che dici?
1) Tu devi sempre e solo controllare la presenza della stringa che inizia con (per separare il codice dal resto del messaggio, usa l'apposito tag dell'editor del forum)
Codice: Seleziona tutto
<Manager
o devi poter controllare la presenza di una stringa che inizi con la apertura di un generico tag che magari vuoi passare al comando, onde avere il tutto più generico?
non ho ben capito la domanda comunque devo verificare che ci sia l'attributo <Manager se c'è devo verificare se c'è randomClass e se non c'è inserirlo...potrebbe anche non esserci <Manager e quindi dovrei inserire sia <Manager che random class.Potrebbero anche esserci due o tre <Manager e quindi dovrei inserire random class per ogni <Manager
2) Stessa domanda per la stringa che devi eventualmente inserire. Immagino non sia sempre
Codice: Seleziona tutto
randomClass="java.security.SecureRandom" />
... in cui presumo che il token di chiusura del tag magari non lo inserisci, nel caso in cui ci sia già il tag di apertura (e quindi presumo già anche quello di chiusura).
esattamente il tag di chiusura si dovrebbe verificare se c'è gia.
3) Qualora non trovassi la riga cercata e la dovessi inserire, ti interessa una particolare posizione (sia per siga sia per riferimento a qualche tag che venga prima o dopo la riga in cui viene scritta l'apertura dal tuo comando)?
Se ti interessa, si può impostare, ma il programma deve rileggere il file e quindi rallenta.
Se non ti interessa la metti direttamente alla fine del file.
puo anche essere messa alla fine l'importante è che si rispetti la sintassi del file xml
Infine, tornando all'uso di bash... ma l'uso di qualche libreria per il parsing xml?
No?
si potrebbe usare anche il parse se semplifica le cose...tu che dici?
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
nel mio caso l'elemento è solo Manager quindi /Context/Manger andrebbe sostituito con solo /Manager giusto?tomm [url=http://forum.ubuntu-it.org/viewtopic.php?p=4582316#p4582316][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ti consiglio di usare xmlstarlet.
Ad esempio, con questo comando puoi verificare la presenza dell'attributo randomClass nell'elemento /Context/Manager:Codice: Seleziona tutto
xmlstarlet sel -t -m "/Context/Manager" -v "@randomClass" conf/context.xml
- 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 certo, ma quindi non si tratta del conf/context.xml di apache tomcat?
- 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
Il parser semplifica, altrimenti non avrebbero scritto i parser 
Detto questo, ti lascio alle cure di tomm, che di sicuro conosce l'argomento meglio di me.
Detto questo, ti lascio alle cure di tomm, che di sicuro conosce l'argomento meglio di me.
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
si si si tratta del /conf/context.xml di apache tomcat....
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
in pratica io dovrei realizzare degli script di hardening per tomcat....e molte di queste regole prevedono la modifica/integrazione del file context.xml e server.xml
-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
confido in tuo aiuto....molti controlli sono simili...se riuscissi a fare questo gli altri si potrebbero più o meno adattare.....
grazie mille
grazie mille
- 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 il percorso esatto dovrebbe essere proprio /Context/Manager perché devi tenere conto anche del nodo principale
http://svn.apache.org/repos/asf/tomcat/ ... ontext.xml
Con questo comando puoi inserire il nodo Manager con l'attributo randomClass:
http://svn.apache.org/repos/asf/tomcat/ ... ontext.xml
Con questo comando puoi inserire il nodo Manager con l'attributo randomClass:
Codice: Seleziona tutto
xmlstarlet ed -s /Context -t elem -n Manager -v "" -i /Context/Manager -t attr -n randomClass -v java.security.SecureRandom conf/context.xml-
piccolotauro2
- Prode Principiante
- Messaggi: 40
- Iscrizione: martedì 13 maggio 2014, 11:52
Re: [bash] verifica e inserimento stringa in un file
ma xmlstarlet prevede qualche libreria?perche lanciandolo da linea di comando mi da comando non presente...
- 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
Ti suggerisce anche come installarlo
Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~$ xmlstarlet
Il programma "xmlstarlet" non è attualmente installato. È possibile installarlo digitando:
sudo apt-get install xmlstarletPirates 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.»
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti