Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/09/2011, 17h05   #1
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Par défaut recherche par bloc

Bonjour,

J'ai un répertoire dans lequel se trouve plusieurs sous repertoires et dans chacun de ces derniers se trouve plusieurs dossiers dont chacun contient un fichier d'extention ".dsc" .
sur ces fichier j'aimerais effectuer la recherche par bloc i.e les blocs dont a premiere ligne commence par le mot "screenout" et les afficher,

exemple de bloc:
Code :
1
2
3
4
5
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom",
        v3 (3) "voiture"
}
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 17h09   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Ton bloc aura toujours le même nombre de lignes ou c'est aléatoire ?

Il te faut le nom du fichier aussi ou que le bloc en sortie ?
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 17h40   #3
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Merci pour ta reponse
sinon le nombre de ligne des blocs et leurs contenenu sont aleatoires

l'idée est que je cherche quelque chose de la sorte

Code :
"début de ligne " (eventuels espaces) scrennout"  n'importe quoi....." {"   afficher le contenu " }"
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 18h08   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Sûrement y-a-t'il plus simple, mais voilà un petit truc à base de "grep" et de "sed" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
$ while read line; do echo "$line :"; sed -n '/screenout/{:z;N;/}$/!bz;p}' $line; echo; done < <(grep -r -l 'screenout' .)
./rep/bar :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom",
        v3 (3) "voiture"
}
 
./rep/rep1/brol :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom"
}
 
./rep/rep1/rep2/toto :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom",
        v3 (3) "voiture"
	v4 (4) "lalala"
}
 
./toto :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom",
        v3 (3) "voiture"
	v4 (4) "lalala"
}
 
./brol :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom"
}
 
./bar :
screenout "Détails du screenout" : {
        v1 (1) "Moins de 18 ans",
        v2 (2) "Dom",
        v3 (3) "voiture"
}
 
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/09/2011, 18h32   #5
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Si tu veux t'éviter la boucle (mais t'auras pas les noms des fichiers) :

Code :
1
2
$ A=$(grep -r -l 'screenout' .)
$ sed -n '/screenout/{:z;N;/}$/!bz;p}' $A
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/09/2011, 09h24   #6
Membre du Club
 
" "
Inscription : janvier 2008
Messages : 204
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 204
Points : 59
Points : 59
Merci pour tes reponses, c'est parfait

voila je veux faire un fichier cbl.sh que je lance depuis le repertoire principale

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

for i in `find -type f -name "*.dsc"`

do

A=$(grep -r -l 'screenout' .)
$ sed -n '/screenout/{:z;N;/}$/!bz;p}' $A

echo "$(basename $i '.dsc') #_non du fichier"

echo "$A"

done
mais comment je fais pour la partie en italique?

merci
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h10   #7
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Code :
1
2
3
4
5
6
7
8
#!/bin/bash
 
while read line
do 
echo "${line##*/} :"
sed -n '/screenout/{:z;N;/}$/!bz;p}' ${line}
echo
done < <(grep -r -l 'screenout' .)
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h31.


 
 
 
 
Partenaires

Hébergement Web