|
|
|
|
Bonjour,
j'ai besoin de traiter un fichier contenant ce qui suit ;
hdfhdfh
ghhgyut
iyuiyuiuyi
zeaeaz
hgdudod
afin d'avoir en sortie :
('hdfhdfh','ghhgyut','iyuiyuiuyi','zeaeaz','hgdudod')
J'ai testé plusieurs truc avec SED mais rien qui fonctionne.
Une idée a me donner?
Merci
L'accès au savoir est la première liberté que chaque homme devrait avoir.Configuration: Linux
Mozilla 1.9.0.11
Bonjour,
|
Re-
sed ':z;N;$!bz;s/\n/'\',\''/g;s/.*/('\''&'\'')/'
:z On pose une étiquette N On ajoute la ligne suivante à l'espace de travail $ !b z Tant que la dernière ligne n'est pas atteinte, on se branche à l'étiquette. s/\n/'\',\''/g Quand la dernière ligne est lue. A ce moment là l'espace de travail ressemble à : hdfhdfh\nghhgyut\niyuiyuiuyi\nzeaeaz\nhgdudod$ on substitue chaque fin de ligne par une virgule. s/.*/('\'&\'')/ Puis on substitue tout ce qui se trouve dans l'espace de travail par lui même entourée de parenthèses et de quotes simples Pour l'histoire des quotes simples dans "s/\n/'\',\''/g" et "s/.*/('\'&\'')/". En fait les commandes du programme de sed sont protégées par des quotes simples, donc la 1ère quote de "s/\n/'\',\''/g" termine la protection de la 1ère partie du programme, donc là on se retrouve à nouveau dans le shell, on protège donc les quotes à insérer et pour retourner dans le programme de sed, on reouvre se qui sera la prochaine partie du programme. Et on recommence la même moulinette pour "s/.*/('\'&\'')/". C'est peut être pas très clair, mais bon ce n'est pas évident à expliquer, encore moins à comprendre je me doute, mais une fois qu'on à piger le truc, ça coule de source ;-)) Pour la commande "ed", qui pourrait aussi se traduire sur une seule ligne par : ed -s fichier <<<$',s/.*/\'&\'/\n1,$-1s/$/,/\n1s/^/\(/\n$s/$/\)/\n1,$j\nw' A la différence de sed, ed n'a qu'une mémoire tampon, dans laquelle il stocke l'intégralité du fichier à traiter. Les changements se font dans cette mémoire tampon. Par défaut la ligne d'édition courante est la dernière ligne du fichier. 1,$ s/.*/'&'/ De la 1ère ligne à la dernière ($), on substitue chaque ligne par elle même encadrée par des quotes simples 1,$-1s/$/,/ De la 1ère ligne à l'avant dernière ($-1), on substitue chaque fin de ligne ($) par une virgule 1s/^/(/ On ajoute une parenthèse ouvrante au début de la 1ère ligne $s/$/)/ On ajoute une parenthèse fermante à la fin de la dernière ligne 1,$j De la 1ère ligne à la dernière on jointe chaque ligne w On écrit le résultat dans le fichier q On quitte Bon appétit ;-)) $ man woman Il n'y a pas de page de manuel pour woman. |