comment afficher une portion de fichier - Version imprimable +- N-PN White-Hat Project (https://dev.n-pn.fr/forum) +-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72) +--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27) +--- Sujet : comment afficher une portion de fichier (/showthread.php?tid=3630) |
comment afficher une portion de fichier - gruik - 09-05-2014 je sais pas vous, mais moi j'ai l'habitude de commenter assez généreusement les bouts de code que j'écris, particulièrement quand il s'agit d'une fonction ou d'un programme qui peut prendre plusieurs paramètres, à tel point qu'avec un paramètre --help je pourrais presque me permettre d'afficher purement et simplement le commentaire : Code BASH :
# commentaire n°1, osef alors voila, le but est d'afficher uniquement le 2e commentaire, comment je pourrais faire ? RE: comment afficher une portion de fichier - fr0g - 09-05-2014 Bash : Code BASH :
Code : ██ [ ~ ] [ 14:43:35 ] python: Code PYTHON :
Code : ██ [ ~ ] [ 14:42:55 ] RE: comment afficher une portion de fichier - balis - 09-05-2014 Paramètre un fichier en bash avec les commentaires dedans , genre $1 pour le commentaire n 1 etc ? RE: comment afficher une portion de fichier - gruik - 09-05-2014 RE: comment afficher une portion de fichier - fr0g - 09-05-2014 Après discussion sur irc j'ai mieux compris le truc recherché Un peu long ma version en Py, je pense qu'il y a largement moyen de faire plus court Code PYTHON :
Execution : Code : ██ [ ~ ] [ 15:42:02 ] RE: comment afficher une portion de fichier - gruik - 09-05-2014 yep sur le principe c'est valide, y'a moyen de faire plus court néanmoins RE: comment afficher une portion de fichier - Booster2ooo - 09-05-2014 En pseudo code vite fais pcq j'suis overbooké Code : function getComment(fName) { RE: comment afficher une portion de fichier - gruik - 09-05-2014 en fait tu match sur le fait qu'on a : Code : # fName : RE: comment afficher une portion de fichier - Junky - 09-05-2014 Pris dans ma réserve de commandes: Code BASH :
Sortie: Code BASH :
Seul "inconvéniant" il faut que le bloque de commentaire soit déparé par des espaces RE: comment afficher une portion de fichier - Booster2ooo - 09-05-2014 (09-05-2014, 16h23)gruik a écrit : en fait tu match sur le fait qu'on a : "}\s*#(.*)function "+fName+"\(\)\s?(" Ca devrait le faire aussi non? Apres, je ne vois plus d'autre solution que de lire le fichier, le splitter en une liste de lignes et la lire à l'envers, dès qu'on tombe sur function toto() {, on output les lignes qui commencent par #, et quand il y en a plus, on exit? RE: comment afficher une portion de fichier - gruik - 09-05-2014 (09-05-2014, 16h53)Booster2ooo a écrit : "}\s*#(.*)function "+fName+"\(\)\s?("humm... l'accolade fermante } en début je suis pas certain de voir où ça mène en fait... Citation :Apres, je ne vois plus d'autre solution que de lire le fichier, le splitter en une liste de lignes et la lire à l'envers, dès qu'on tombe sur function toto() {, on output les lignes qui commencent par #, et quand il y en a plus, on exit? ce dont on est sûr c'est qu'il y a une ligne vide (\n\n) juste avant le bloc de commentaire (c'est plus lisible quoi), que chaque ligne du bloc de commentaires commence par '#' et que l'on doit s'arreter à la ligne (unique) qui commence par "function toto" une methode consiste à dire : - si la ligne commence par "function toto" on affiche le tableau t - si la ligne commence par '#' on la rajoute au tableau t - sinon on met le tableau t à zéro en perl : Code PERL :
perl -ne 'print @t if/^function toto/;(/^#/)?push @t,$_:{@t=()}' programme.sh note que la 2e partie est un opérateur ternaire ça marche aussi avec du awk, c'est juste un chouillat plus long RE: comment afficher une portion de fichier - gruik - 09-05-2014 et la version à base de regex, en une ligne de python (cc fr0g ;p) : Code PYTHON :
python -c 'import re; print re.findall("\n\n(#(?:.(?!\n{2}))+)function toto", open("script.sh").read(), re.MULTILINE | re.DOTALL)[0]' RE: comment afficher une portion de fichier - fr0g - 09-05-2014 (09-05-2014, 17h39)gruik a écrit : et la version à base de regex, en une ligne de python (cc fr0g ;p) : Yep, en regex c'est tout de suite plus court ^^ |