[perl] extraire le texte d'une ligne
Résolu/Fermé
trepliev
Messages postés
3
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
2 février 2008
-
31 janv. 2008 à 18:29
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 2 févr. 2008 à 16:06
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 2 févr. 2008 à 16:06
A voir également:
- [perl] extraire le texte d'une ligne
- Extraire une video youtube - Guide
- Partager photos en ligne - Guide
- Extraire son d'une video - Guide
- Aller à la ligne excel - Guide
- Excel cellule couleur si condition texte - Guide
5 réponses
trepliev
Messages postés
3
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
2 février 2008
3
2 févr. 2008 à 15:46
2 févr. 2008 à 15:46
Ello,
Pour ceux que ça intéresse, j'ai trouvé comment faire ça en perl sans regexp et également avec une commande bash.
En perl:
En bash, on peut utiliser la commande colrm
Par exemple:
En espérant que ça puisse aider ;)
Trepliev
Pour ceux que ça intéresse, j'ai trouvé comment faire ça en perl sans regexp et également avec une commande bash.
En perl:
#! /usr/bin/perl while ($string = <>) { # lecture ligne par ligne du fichier passé en paramètre $extract = substr( $string, 4, 15 ); # extraie le texte à partir du caractère 5 sur les 15 prochains caractères print "$extract\n"; }
En bash, on peut utiliser la commande colrm
Par exemple:
colrm 5 15 < test > resultva supprimer les caractères de 5 à 15 inclus de test et afficher le reste dans result
En espérant que ça puisse aider ;)
Trepliev
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
31 janv. 2008 à 19:27
31 janv. 2008 à 19:27
Salut,
Et avec "sed" ça te branche pas ?
Et avec "sed" ça te branche pas ?
[tmpfs]$ cat trepliev bla yopyo ahah pofpofpof pifpif [tmpfs]$ sed -n 's/^.\{10\}\(.*\)/\1/w fich.out' trepliev [tmpfs]$ cat fich.out ahah pifpif;-))
trepliev
Messages postés
3
Date d'inscription
jeudi 31 janvier 2008
Statut
Membre
Dernière intervention
2 février 2008
3
31 janv. 2008 à 20:05
31 janv. 2008 à 20:05
Salut et merci pour ta réponse,
Effectivement ça donne le résultat attendu (pourrais-tu d'ailleurs détailler un peu la commande ?)
Le problème c'est que je vais avoir ensuite d'autres traitements sur cette extraction, avec des conditions en fonction de la présence d'un caractère précis à telle ou telle position....c'est pour ça que j'étais parti sur du perl.
Trepliev
Effectivement ça donne le résultat attendu (pourrais-tu d'ailleurs détailler un peu la commande ?)
Le problème c'est que je vais avoir ensuite d'autres traitements sur cette extraction, avec des conditions en fonction de la présence d'un caractère précis à telle ou telle position....c'est pour ça que j'étais parti sur du perl.
Trepliev
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
31 janv. 2008 à 20:34
31 janv. 2008 à 20:34
-n : demande de ne pas afficher le résultat sur la sortie standard (l'écran)
s : commande de substitution
/ : délimiteur de la commande "s"
^.\{10\}\(.*\) : l'expression rationnelle décomposée comme suit :
^.\{10\} : les 10 premiers caractère (symbolisés par le point ".") depuis le début (^) de la ligne. (Les accolades doivent être protégées (\{ et \}) pour ne pas être interprétées littéralement)
\(.*\) : la sous-expression (entre parenthèses protégées elles aussi pour ne pas être interprétées littéralement) qui matche du 11ème caractère à la fin
/ : délimiteur de la commande "s"
\1 : la référence à la sous-expression (si plusieurs, les références se font par /2 /3 /4 etc. jusqu'à 9).
/ : délimiteur de fin de la commande "s"
w fich.out : le switch "w" (pur write) qui demande l'écriture de la sous-expression dans le fichier de sortie
En résumé : dans la commande de substitution, on demande à récupérer ce qui est matchée par la sous-expression et de l'envoyer dans un fichier de sortie
;-))
s : commande de substitution
/ : délimiteur de la commande "s"
^.\{10\}\(.*\) : l'expression rationnelle décomposée comme suit :
^.\{10\} : les 10 premiers caractère (symbolisés par le point ".") depuis le début (^) de la ligne. (Les accolades doivent être protégées (\{ et \}) pour ne pas être interprétées littéralement)
\(.*\) : la sous-expression (entre parenthèses protégées elles aussi pour ne pas être interprétées littéralement) qui matche du 11ème caractère à la fin
/ : délimiteur de la commande "s"
\1 : la référence à la sous-expression (si plusieurs, les références se font par /2 /3 /4 etc. jusqu'à 9).
/ : délimiteur de fin de la commande "s"
w fich.out : le switch "w" (pur write) qui demande l'écriture de la sous-expression dans le fichier de sortie
En résumé : dans la commande de substitution, on demande à récupérer ce qui est matchée par la sous-expression et de l'envoyer dans un fichier de sortie
;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
2 févr. 2008 à 16:06
2 févr. 2008 à 16:06
Merci ;-))
Mais on peut aussi faire comme ça :
Mais on peut aussi faire comme ça :
$ cat plop bla yopyo ahah pofpofpof pifpif $ while read line; do echo ${line:10}; done < plop ahah pifpifet si tu ne veux 3 caractères à partir du 10ème, il suffit de rajouter :
$ while read line; do echo ${line:10:3}; done < plop aha pif;-))