Shell/Batch grep + sed - Shell/Batch - Programmation
Marsh Posté le 11-01-2011 à 17:13:12
tu peux rajouter à ta ligne:
Code :
|
ca devrait faire a peu près ce que tu veux...
Marsh Posté le 11-01-2011 à 17:20:20
Bonjour et merci pour ta réponse plus que rapide.
En effet ta proposition marche parfaitement.
Mais j'aimerais bien comprendre le sed qui m'a toujours été abstrait.
pourrais tu expliquer rapidement les paramètres du sed si ce n'est pas trop abuser.
Marsh Posté le 11-01-2011 à 17:31:48
alors, en gros la syntaxe de sed (utilisé de cette manière), c'est:
Code :
|
le s veut dire substitute, donc indique un remplacement... (parce qu'on peut faire aussi plein de trucs, des print, des delete, etc.)
ici, je recherche la chaine .*\/\(.*\.cpp\).*\"\(.*\)\".* et je la remplace par \1 \2.
c'est pas hyper compliqué, faut connaitre la base des regexp, comprendre l'esprit et après être méthodique avec les expressions régulières... après si ca se trouve il ya mille fois plus simple pour faire la même chose, avec un autre sed, avec awk, etc.
Marsh Posté le 11-01-2011 à 17:41:26
Merci encore pour ton aide,
En espérant que se sujet serve à d'autres.
Marsh Posté le 11-01-2011 à 17:44:28
pas de souci.
et pour le reste: google "man sed" !
Marsh Posté le 11-01-2011 à 21:02:05
Pour simplifier les choses, j'aime bien tenter de limiter le nombre de caractère spéciaux échapés pour améliorer la lisibilité.
Ainsi :
find -name *.cpp | xargs grep "sVersion(L" | sed 's#.*/(.*\.cpp).*"(.*)".*#\1 \2#" |
Devrait donner la même chose en (un peu) plus lisible.
Par contre ce que je n'ai pas bien compris, c'est pourquoi les parenthèses sont échappées de base, pataluc.
Sinon les explications de pataluc restent applicables, ce que j'ai modifié :
Marsh Posté le 12-01-2011 à 00:37:15
Elmoricq a écrit : Par contre ce que je n'ai pas bien compris, c'est pourquoi les parenthèses sont échappées de base, pataluc. |
il me semblait que c'était nécessaire... en tout cas ca marche avec, et si je les mets pas: "sed: -e expression #1, char 31: invalid reference \2 on `s' command's RHS"
mais sinon, effectivement avec le # et les quotes c'est déja plus lisible...
Marsh Posté le 11-01-2011 à 17:01:31
Bonjour,
Je cherche à faire un petit script qui va permettre de récupérer un numéro de version dans un fichier cpp.
J'aimerais donc récupérer le nom du fichier et son numéro de version.
Cela fait maintenant longtemps que je n'ai plus fait ce genre de chose et de plus le sed n'a jamais été ma tasse de thé
Je suis sur Cygwin et la méthode recursive de grep ne fonctionne pas, donc voici ma command qui va me donner ces résultat.
voici la réponse:
Il me semble que l'on peut ajouter une option à grep pour ne pas afficher le chemin mais juste le fichier mais ensuite je devrais bien faire un sed pour récupérer le nom du fichier et la version associer et alors là mes compétences s'arrête.
Quelqu'un pourrait t'il m'aider sur ce point.
Merci d'avance pour vos réponses.