Sed et expression réguliere encore
gLoria
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
en ces temps sombres, je reviens vers vous...
j'ai de nouveau un soucis d'expression régulière. J'étais "mauvais"... maintenant je ne suis "pas bon" :)
J'ai des fichiers commençant soit par :
soit par :
Il se peut qu'il n'y ait qu'une seule ligne de texte (apres le # et éventuellement la ligne vide) dans un fichier.
Objectif :
-supprimer la première ligne avec le # et supprimer la seconde ligne si elle est vide
-récupérer le texte de la seconde ligne de la forme "blabla blablab bkla (bla)" pour renommer le fichier par ce texte
- et du coup enlever le ". - " qui reste avant le début du texte
j'ai essayé des trucs dans le genre de :
tail -n +2 $file | sed '/^$/d' |sed '1{h;d; s/.*-\(.*\)/\1/;G}' > fichier.txt
mais je supprime trop de choses à chaque fois...
merci beaucoup messieurs les bons en ça :D
en ces temps sombres, je reviens vers vous...
j'ai de nouveau un soucis d'expression régulière. J'étais "mauvais"... maintenant je ne suis "pas bon" :)
J'ai des fichiers commençant soit par :
# blabla (bla). - blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal
soit par :
# blabla (bla). - blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal
Il se peut qu'il n'y ait qu'une seule ligne de texte (apres le # et éventuellement la ligne vide) dans un fichier.
Objectif :
-supprimer la première ligne avec le # et supprimer la seconde ligne si elle est vide
-récupérer le texte de la seconde ligne de la forme "blabla blablab bkla (bla)" pour renommer le fichier par ce texte
- et du coup enlever le ". - " qui reste avant le début du texte
j'ai essayé des trucs dans le genre de :
tail -n +2 $file | sed '/^$/d' |sed '1{h;d; s/.*-\(.*\)/\1/;G}' > fichier.txt
mais je supprime trop de choses à chaque fois...
merci beaucoup messieurs les bons en ça :D
A voir également:
- Sed et expression réguliere encore
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Avoir du ping expression ✓ - Forum jeux en ligne
- C quoi un ping? ✓ - Forum Réseau
- Expression de recherche - Guide
2 réponses
Salut,
Pour ce qui est de supprimer le "#" et éventuellement la ligne vide qui suit, ceci devrait faire l'affaire :
Après pour ce qui est du reste, il te faudra passer par du bash combiné à du sed et/ou d'autres outils...
Pour ce qui est de supprimer le "#" et éventuellement la ligne vide qui suit, ceci devrait faire l'affaire :
sed '/^#/{N;/^#\n$/d;D}'
Après pour ce qui est du reste, il te faudra passer par du bash combiné à du sed et/ou d'autres outils...
Salut,
Comme ça?!
Comme ça?!
~$ cat fichier.txt # blabla (bla). - blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal ~$ perl -pi.orig -e 's/.*\n// if $.==1&&/^#/ or $.==2&&/^$/;/^\s*(\w.*\))/;$h{$1}++ if $1;s/^.*-\s+//;END{rename($ARGV,keys %h)}' fichier.txt ~$ cat fichier.txt cat: fichier.txt: Aucun fichier ou dossier de ce type ~$ cat blabla\ \(bla\) blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal ~$ cat fichier.txt.orig # blabla (bla). - blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal lami20j@debian-acer:~$ lami20j@debian-acer:~$ ~$ cat fichier2.txt # 2blabla (bla). - 2blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal ~$ perl -pi.orig -e 's/.*\n// if $.==1&&/^#/ or $.==2&&/^$/;/^\s*(\w.*\))/;$h{$1}++ if $1;s/^.*-\s+//;END{rename($ARGV,keys %h)}' fichier2.txt ~$ cat fichier2.txt cat: fichier2.txt: Aucun fichier ou dossier de ce type ~$ cat 2blabla\ \(bla\) 2blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal ~$ cat fichier2.txt.orig # 2blabla (bla). - 2blablabla. blabla-blabla. blablablabalbalbalba blablablablablabal ~$
Pour le reste, c'est fort délicat.
J'avais essayé avec un head puis un cut et enfin un sed, mais le résultat n'est absolument pas fiable :(
dommage