Forum dedicato alla programmazione.
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 12:20
Ciao,
ho una serie di directory, all'interno di alcune di esse c'è un file, quando c'è devo estrapolare delle stringhe da questo file.
In sostanza dovrebbe essere così:
Codice: Seleziona tutto
- creo un ciclo e per ogni directory che trovo:
- controllo se c'è un determinato file appl'interno
- apro il file ed estraggo delle stringhe
- concludo il cliclo e passo alla directory successiva
per il momento sono permo al primo punto: creare un ciclo per ogni directory...
Ultima modifica di
daniele50 il mer 9 nov 2011, 16:53, modificato 1 volta in totale.
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 12:39
Ci devi dare altre info, così non si capisce molto. Cosa devi estrapolare? Lo vuoi fare con l'editing al volo oppure vuoi editare a mano tutti i file? La struttura della directory com'è? I file stanno nel secondo livello dalla directory "madre" oppure possono stare in un qualsiasi sottolivello? Se la struttura è questa:
Ti basta fare:
Codice: Seleziona tutto
for file in */mio_file
do
quello_che_ci_devi_fare_su file
done
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 13:18
Mi spiego meglio, la struttura è questa:
Codice: Seleziona tutto
..
dir1/dir/dir/miofile
dir2
dir3/dir/dir/miofile
dir4/dir/dir/miofile
dir5
..
se c'è il file
miofile mi server sapere in quale dir sono (dir1, dir2, ecc) e poi dovro estrarre delle stringhe dal contenuto di miofile.
Come estrarre parti del contenuto dei file ci penso in seconda istanza...
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 13:23
Allora fai:
Codice: Seleziona tutto
for file in */*/*/miofile
do
dirname=${file%%/*}
...
done
così in dirname hai il nome della directory in cui è contenuto il file. Però se ti ostini a non dirci cosa devi estrapolare non possiamo dirti come
.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 14:22
Eccomi, volevo procedere per gradi, lo script funziona:
Codice: Seleziona tutto
#!/bin/sh
for file in */WEB-INF/classes/DBConfig
do
dirname=${file%%/*}
echo $dirname
done
così vedo tutte le directory che contengono il file WEB-INF/classes/DBConfig
ecco com'è fatto il file DBConfig:
JDBCConnectionURL.1=jdbc:sqlserver://NomeServer :1433;DatabaseName=NomeDatabase
JDBCDriver.1=com.microsoft.sqlserver.jdbc.SQLServerDriver
UserName.1=Utente
Password.1=Password
Instance.1=SERVLET
DefaultUserTimeout=3600
in alcuni casi però il la prima riga è così:
JDBCConnectionURL.1=jdbc:sqlserver://NomeServer :1433;DatabaseName=NomeDatabase ;sendStringParametersAsUnicode=false;selectMethod=cursor
mentre le successive sono uguali.
Devo catturare le parti in grassetto...
notsafe
Linux 2.x
Messaggi: 451 Iscritto il: mar 21 mar 2006, 11:00
Messaggio
da notsafe » mer 9 nov 2011, 15:06
per catturare le due stringe dal file
Codice: Seleziona tutto
SERVERNAME=$(grep JDBCConnectionURL $NOMEFILE|awk -F/ '{ print $3 }' | awk -F: '{ print $1 }')
DBNAME=$(grep JDBCConnectionURL $NOMEFILE|awk -F/ '{ print $3 }' | awk -F= '{ print $1 }'| awk -F\; '{ print $2 }')
echo $SERVERNAME
echo $DBNAME
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 15:41
Questo è il file:
Codice: Seleziona tutto
JDBCConnectionURL.1=jdbc:sqlserver://192.168.1.1:1433;DatabaseName=SQL12345
JDBCDriver.1=com.microsoft.sqlserver.jdbc.SQLServerDriver
UserName.1=Utente
Password.1=Password
Instance.1=SERVLET
DefaultUserTimeout=3600
Questo è il risultato che mi da lo script di notsafe:
Il nome server è corretto ma il nome database no, awk non lo conosco, sto cercando non è semplice... per me...
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 15:42
Andare per gradi è l'approccio corretto, però noi ti possiamo aiutare solo quando abbiamo tempo
. Se ci avessi detto fin da subito cosa volevi estrapolare avresti già avuto il tuo bellissimo script.
Capisco che è un commento sterile il mio. Più tardi ti posto cosa avrei fatto.
@notsafe. Mi sa che devi prelevargli anche il nume utente e la password.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 15:54
Hai ragione, accetto l'aiuto che potete darmi senza polemizzare e chiarisco un paio di cose:
- come dici tu ho bisogno anche user e password
- come detto nel mio precedente post il nome database è errato
Grazie per l'aiuto che offrite!
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 15:59
Non ti preoccupare, l'ho già detto che era un commento sterile. Ecco come farei io:
Codice: Seleziona tutto
#!/bin/sh
for file in */WEB-INF/classes/DBConfig
do
dirname=${file%%/*}
infos=( $(sed -n '/^JDBCConnectionURL/{s/.*:\/\/\([^:]*\).*DatabaseName=\([^;]*\);\?.*/\1 \2/;p};/^UserName/b get_value;/^Password/b get_value;d;:get_value s/.*=\(.*\)/\1/;p' $file) )
echo "$dirname ${infos[0]} ${infos[1]} ${infos[2]} ${infos[3]}"
done
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
notsafe
Linux 2.x
Messaggi: 451 Iscritto il: mar 21 mar 2006, 11:00
Messaggio
da notsafe » mer 9 nov 2011, 16:01
sorry
correggi con questo:
Codice: Seleziona tutto
DBNAME=$(grep JDBCConnectionURL $NOMEFILE|awk -F/ '{ print $3 }' | awk -F= '{ print $2 }'| awk -F\; '{ print $1 }')
da un test dovrebbe darti la stringa corretta:
Codice: Seleziona tutto
echo "JDBCConnectionURL.1=jdbc:sqlserver://192.168.1.1:1433;DatabaseName=SQL12345"| awk -F/ '{ print $3 }' | awk -F= '{ print $2 }'| awk -F\; '{ print $1 }'
SQL12345
per user e password...puoi continuare a giocare con awk (se ti diciamo tutto..che divertimento c'è nel creare uno script?
)
UPDATE:
direi che la soluzione di spina è ben più elegante
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 16:12
Risultato dell script di notsafe:
Mancano user e password ma il resto è giusto.
Risultato dell script di spina:
Ci sono quasi tutti i parametri l'utente no (e poi c'è 'ow' dopo l'utente...)
Mi rendo conto che di espressioni non so proprio nulla
Ultima modifica di
daniele50 il mer 9 nov 2011, 16:24, modificato 1 volta in totale.
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 16:15
Guarda che lo script che ho fatto era in continua modifica
. Ora dovrebbe essere corretto. Non so quando lo hai testato tu.
Codice: Seleziona tutto
tree
.
|-- dir1
| `-- casa
|-- dir2
|-- dir3
| `-- casa
Il contenuto dei due file 'casa' è esattamente quello che hai postato tu prima.
Codice: Seleziona tutto
for file in */casa
do
dirname=${file%%/*}
infos=( $(sed -n '/^JDBCConnectionURL/{s/.*:\/\/\([^:]*\).*DatabaseName=\([^;]*\);\?.*/\1 \2/;p};/^UserName/b get_value;/^Password/b get_value;d;:get_value s/.*=\(.*\)/\1/;p' $file) )
echo "$dirname ${infos[0]} ${infos[1]} ${infos[2]} ${infos[3]}"
done
dir1 NomeServer NomeDatabase Utente Password
dir3 NomeServer NomeDatabase Utente Password
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
daniele50
Linux 3.x
Messaggi: 964 Iscritto il: mar 10 apr 2007, 13:58
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.1
Kernel: 3.10.17
Desktop: Xfce 4.10
Località: San Zenone al Lambro (MI)
Contatta:
Messaggio
da daniele50 » mer 9 nov 2011, 16:25
... vedi post precedente che ho modificato ...
Ultima modifica di
daniele50 il mer 9 nov 2011, 16:35, modificato 1 volta in totale.
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » mer 9 nov 2011, 16:28
Puoi postare il file sotto esame? Ovviamente modifica pure i dati sensibili.
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama