Bonjour, J'aime bien sed, car il fait partie de `coreutils` et est présent dans toutes les machines plus ou moins "POSIX".
Voici donc quelques astuces a propos de sed: - recherches des nom de répertoires Où il est question de trouver des chaines qui terminent par un ``/'' ou qui teminent la ligne: $ sed -ne '/\/path\/au\/slash\/echappe\($\|\/\)/p' ou $ set -ne '/\/path\/au\/slash\/echappe\(\/\|$\)/p' En utilisant l'argument `-r` l'échapement des parenthèse est inversé: $ sed -rne '/\/path\/au\/slash\/echappe(\/|$)/p' et cela devient un peu plus lisible... Mais la réflexion peut être posée différement! où: Il y sera question de trouver les lignes qui terminent par le nom du dossier ou le nom du dossier suivit de / qqqch: $ sed -ne '/\/path\/au\/slash\/echappe\(\|\/.*\)$/p' ou $ sed -rne '/\/path\/au\/slash\/echappe(|\/.*)$/p' - Extraction d'*une* table, d'*une* database d'un `mysql_dump_all`... Soit un dump de mysql qui contient plusieurs centaines de databases qui contiennent beaucoup de tables au nom identique. Par ex: un hegergeur WEB host plusieur DB par client. Parmi les clients bcp installeront du wordpress, joomla ou autre cms, utilisant une structure de db identique... Le but est de ne ressortir que le *contenu de la* table `xxx`, de *la* database `yyy`. Le fichier mysql_dump.gz pèse 7Gb! La commande `gunzip -l` indique que le fichier décompressé pèse 21Gb!! (Je dispose de 4Gb de RAM;-) Voici comment j'ai fait. $ dbname=yyy tblname=xxx $ zcat mysql_dump.gz | sed -ne '/^-- Current Database: `'$dbname'`$/,/^-- Current Database/{ /^-- Current Database/{ /'$dbname'/!q }; /^-- Dumping data for table `'$tblname'`$/,/^--$/{ //{N;P;d}; p; } }' | gzip >$outfile.gz fun! - Petit exercice de style: Le but était de totaliser les lignes par champ: A 8 B 3 A 2 B 4 pour obtenir: A 10 B 7 ... en utilisant `sed` (au lieu de `sort`) $ echo $'A 8\nB 3\nA 2\nB 4' | sed -ne ' x; # swap crt line and hold space G; # append hold space to crt line /\(.\)=.*\n\1/ ! s/^\(.*\)\n\(.\) \(.*\)$/\1 \2=\3 /; # if not find, append s/\(.\)=\(.*\)\n\1 \(.*\)/\1=\3+\2/; # add `+` + crt value at right place x; # swap crt line and hold space ${ # on last line x; # swap crt line and hold space p # print }' A=2+8 B=4+3 Ce sera tout pour aujourd'hui. -- Félix Hauri - <fe...@f-hauri.ch> - http://www.f-hauri.ch _______________________________________________ gull mailing list gull@forum.linux-gull.ch http://forum.linux-gull.ch/mailman/listinfo/gull