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 sempre la versione di Slackware usata e la versione del Kernel. Questi dati aiutano le persone che possono rispondere.
2) Specificare sempre il tipo di shell (bash, sh, csh, etc...)
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 dell'ultima regola 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 13: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 17:53, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 893
Iscritto il: mar apr 10, 2007 13: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: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
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: 5912
Iscritto il: gio nov 03, 2005 15: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: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: 893
Iscritto il: mar apr 10, 2007 13: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 14: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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5912
Iscritto il: gio nov 03, 2005 15: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: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: 893
Iscritto il: mar apr 10, 2007 13: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 16: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: 447
Iscritto il: mar mar 21, 2006 12:00

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

Messaggioda daniele50 » mer nov 09, 2011 16: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: 893
Iscritto il: mar apr 10, 2007 13: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: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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5912
Iscritto il: gio nov 03, 2005 15: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: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: 893
Iscritto il: mar apr 10, 2007 13: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: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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5912
Iscritto il: gio nov 03, 2005 15: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 17: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: 447
Iscritto il: mar mar 21, 2006 12:00

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

Messaggioda daniele50 » mer nov 09, 2011 17: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 17:24, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 893
Iscritto il: mar apr 10, 2007 13: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 17: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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5912
Iscritto il: gio nov 03, 2005 15: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 17:25

... vedi post precedente che ho modificato ...
Ultima modifica di daniele50 il mer nov 09, 2011 17:35, modificato 1 volta in totale.
Avatar utente
daniele50
Linux 2.6
Linux 2.6
 
Messaggi: 893
Iscritto il: mar apr 10, 2007 13: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 17: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
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 5912
Iscritto il: gio nov 03, 2005 15: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