Bonjour,
je tourne un peu en rond depuis quelque temps :
je tente de lire dans un fichier sxw pour trouver les fichiers qui comprennent le mot cahier (par exemple).
j'ai donc trouvé avec la ligne de commande un :
unzip -p fichier.sxw content.xml|grep -i "cahier" et
là, il m'affiche automatiquement
le contenu xml du fichier content.xml qui a bien cahier dedans.
Hors j'aimerais avoir le nom du fichier et pas le contenu de la ligne , j'ai donc essayé avec grep -l et là, il affiche (entrée standard).
je comprend le problème : le fichier est bien l'entré standard suis-je bête.
Donc, j'essaye de faire une script shell (vous moquez pas ! )
#!/bin/bash
for i in *.sxw
do
if [unzip -p $i content.xml|grep -i -l "scaner"]; then
echo $i
fi
done
Et là, il n'affiche rien, pourtant il devrait écrire le nom du fichier,
si je rajoute une ligne :
unzip -p $i content.xml|grep -i -l "scaner", il affiche rien non plus.
Quelqu'un pour aider un pov' handicapé de la comprenette des shell et sous-shell (et des tests)
Merçi
hervé
# zgrep
Posté par Hardy Damien . Évalué à 2.
Dam
[^] # Re: zgrep
Posté par hervé Couvelard . Évalué à 1.
?
j'suis pas le seul handicapé ici, cela rassure
(j'rigole :-)) )
[^] # Re: zgrep
Posté par hervé Couvelard . Évalué à 2.
z'avais bien dit qu'j'étais handicapé.
j'va regarder.
# scaner ?
Posté par Pascal Terjan (site web personnel) . Évalué à 2.
Et sinon comme dit ci-dessus, zgrep c'est plus cool :)
[^] # Re: scaner ?
Posté par hervé Couvelard . Évalué à 2.
#!/bin/bash
for i in `ls -R *.sxw`
do
echo $i
zgrep -i -l "scaner" $i
done
Maintenant 2 problèmes : si j'ai un nom avec un espace dans le fichier, j'ai une erreur gzip : part.gz: no such file or directories, (il faudrait protéger le nom des fichiers par \, mais comment faire ?
2 : dans ce cas le ls -R *.sxw n'est pas récursif alors que les -R l'est (récursif)
[^] # Re: scaner ?
Posté par Pascal Terjan (site web personnel) . Évalué à 2.
2/ ls -R *.sxw te liste tout le contenu des repertoires dont le nom se termine par .sxw, utilise plutôt find -name '*.sxw'
# plutôt comme ça :
Posté par tgl . Évalué à 3.
[^] # Re: plutôt comme ça :
Posté par hervé Couvelard . Évalué à 2.
il fallait penser à --label="$i" ! ! ! !
# ls -R ?
Posté par hervé Couvelard . Évalué à 2.
ls *.sxw -> marche bien
ls -R -> marche bien
ls -R *.sxw -> marche pas bien (pas récursif)
[^] # to find, you must use find
Posté par Frederic Brugmans . Évalué à 2.
[^] # Re: to find, you must use find
Posté par hervé Couvelard . Évalué à 2.
merci qd même, la communauté est une idée merveilleuse qd même
hervé
# trouver un mot dans un fichier sxw sous linux
Posté par hervé Couvelard . Évalué à 4.
#!/bin/bash
for i in `find -name "*.sxw"` ; do
unzip -pqq "$i" content.xml 2>\dev\null | grep -l -i --label="$i" "$1" 2>\dev\null
done
vous enregistrez ce fichier sous un nom recherche.sh
(le mien est à la racine de mon home)
puis chmod +x recherche.sh
puis recherche.sh mot_a_cherche -> cela liste le nom des fichiers sxw qui contiennent le mot mot_a_chercher
Astuce : vous faite un lien symbolique
ln -s /ou/est/votre/fichier/recherche.sh /usr/bin/recherche_sxw
(ou /usr/local/bin selon votre choix -il faut être root)
et maintenant lorsque vous tapez :
recherche_sxw mot_a_chercher à partir d'un répertoire, il recherche dans le répertoire courant et tous les sous répertoires.
voila
[^] # Re: trouver un mot dans un fichier sxw sous linux
Posté par Adrien BUSTANY (site web personnel) . Évalué à 1.
[^] # Re: trouver un mot dans un fichier sxw sous linux
Posté par Mathias Bavay (site web personnel) . Évalué à 2.
for i in `find -name "*.sxw"` ; do
unzip -pqq "$i" content.xml 2>\dev\null | grep -l -i --label="$i" "$1" 2>\dev\null
done
Euh.... je prefererais la syntaxe suivante:
#!/bin/bash
#ce script recherche la chaine fournie en argument dans l'ensemble des fichiers sxw a partir du repertoire courant.
file_list=$(find -name "*.sxw")
chaine=$1
for i in "${file_list}"
do
unzip -pqq "$i" content.xml 2>\dev\null | grep -l -i --label="$i" "${chaine}" 2>\dev\null
done
C'est un peu plus propre, c'est un peu plus flexible, et surtout ca donne de bonne habitudes pour quand on se met a faire des scripts de tueur longs de plusieurs pages (si si, ca existe ! J'avais fait un system de creation automatique de jeux de courbes pre-definis pour des manips. Il me suffisait a la fin de la manip de taper "cr_graph.sh" pour que les scripts aillent chercher les bonnes données dans une base de donnée (qui avait enregistree les mesures de plus de 100 capteurs), chargent les donnees dans Xmgrace, mettent les bonnes couleurs, les bons titres, les bonnes legendes, ... et creer un fichier PDF de cela).
Mathias
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.