Repository 32bit  Forum
Repository 64bit  Wiki

[bash] cerca string in file contenuto in ogni directory [ris]

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.

[bash] cerca string in file contenuto in ogni directory [ris]

Messaggioda daniele50 » mer nov 09, 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 nov 09, 2011 16:53, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 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:
Codice: Seleziona tutto
.
 dir1/
 dir1/mio_file
 dir2/
 dir3/
 dir3/mio_file
...
Ti basta fare:
Codice: Seleziona tutto
for file in */mio_file
 do
  quello_che_ci_devi_fare_su file
done

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 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...
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 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...
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda notsafe » mer nov 09, 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
notsafe
Linux 2.4
Linux 2.4
 
Messaggi: 451
Iscritto il: mar mar 21, 2006 11:00

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 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:
Codice: Seleziona tutto
192.168.1.1
DatabaseName

Il nome server è corretto ma il nome database no, awk non lo conosco, sto cercando non è semplice... per me...
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 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!
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda notsafe » mer nov 09, 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 :)
notsafe
Linux 2.4
Linux 2.4
 
Messaggi: 451
Iscritto il: mar mar 21, 2006 11:00

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 2011 16:12

Risultato dell script di notsafe:
Codice: Seleziona tutto
192.168.1.1
SQL12345

Mancano user e password ma il resto è giusto.

Risultato dell script di spina:
Codice: Seleziona tutto
 Pas12345ow 192.168.1.1 SQL12345

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 :cry:
Ultima modifica di daniele50 il mer nov 09, 2011 16:24, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda daniele50 » mer nov 09, 2011 16:25

... vedi post precedente che ho modificato ...
Ultima modifica di daniele50 il mer nov 09, 2011 16:35, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 928
Iscritto il: mar apr 10, 2007 12:58
Località: San Zenone al Lambro (MI)
Nome Cognome: Daniele Cinquanta
Slackware: Slackware64 14.0
Kernel: 3.2.29
Desktop: Xfce 4.10

Re: [bash] ricerca stringa in un file contenuto in ogni cart

Messaggioda targzeta » mer nov 09, 2011 16:28

Puoi postare il file sotto esame? Ovviamente modifica pure i dati sensibili.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6157
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite