Extraire information dans fichier

Résolu
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Bonjour,
Je suis actuellement confronté à un problème d'extraction.
Voilà je dispose d'un fichier que j'appellerais "toto.txt".
Voici son contenu:
Start
Serveur=anonyme
1212596 816 -rw-rw-r-- 1 toto groland 829924 nov. 29 04:35 /data/xpl/tmp/F0413691
1212871 35184 -rw-rw-r-- 1 toto groland 35984440 nov. 6 00:03 /data/xpl/tmp/F0397858.pi99
1212859 58048 -rw-rw-r-- 1 toto groland 59373540 nov. 3 14:22 /data/xpl/tmp/F0396850.pi99
1212891 684 -rw-rw-r-- 1 toto groland 693250 nov. 11 04:10 /data/xpl/tmp/F0401716
1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99
213009 4 -rw-rw-r-- 1 toto groland 1044 oct. 12 17:23 /data/xpl/tmp/F0381021
1212720 4 -rw-rw-r-- 1 toto groland 40 oct. 14 17:29 /data/xpl/tmp/F0383063
1212721 4 -rw-rw-r-- 1 toto groland 2344 oct. 10 15:23 /data/xpl/tmp/F0378393
1212564 632 -rw-rw-r-- 1 toto groland 641737 nov. 28 04:41 /data/xpl/tmp/F0412689
End

Il faut que je parvienne à extraire le numéro qui se trouve en fin de ligne derrière le "F*".
A noter la difficulté avec la ligne suivante (il peut y en avoir plusieurs):
1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99

Comment puis-je effectuer cette opération ?
Avec une boucle for j'imagine ?

Merci d'avance pour votre aide.
Ka-El
A voir également:

2 réponses

Utilisateur anonyme
 
echo "$a" | sed -e 's/^.*F\(.*\)/\1/g'
0413691 
0397858.pi99 
0396850.pi99 
0401716 
0394328.pi99 
0381021 
0383063 
0378393 
0412689


avec $a qui contient le retour de ton ls -l
a="`ls -l`"
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Merci Rocailleux !
c'est pas mal du tout. Par contre, il me faudrait le même résultat mais sans l'extension ".pi99" sur les 3 lignes.
Une idée ?
Merci
0
Utilisateur anonyme
 
echo "$a" | sed -e 's/^.*F\(.*\)/\1/g' | cut -d. -f1
0413691 
0397858
0396850
0401716 
0394328
0381021 
0383063 
0378393 
0412689


ou inclus dans le sed ..

$echo "$a" | sed -e 's/^.*F\([0-9]*\).*$/\1/g'
0413691
0397858
0396850
0401716
0394328
0381021
0383063
0378393
0412689
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
 
C'est effectivement le résultat que j'attends.
Mais je ne comprends pas pourquoi tu utilises un echo, sachant que je dois extraire les informations à partir d'un fichier ?
Ne faudrait-il pas passer par un "cat" ?
Désolé je ne suis pas une flèche en shell...
0
Utilisateur anonyme
 
Pour faire mes tests j'ai mis le contenu de ton ls -l dans une variable, donc pour envoyer ma variable dans le sed il faut faire un echo "$variable" | sed.

Après effectivement si les lignes se trouvent dans un fichier ce sera cat fichier | sed (edit : ou sed 's...' fichier )
0
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
 
Bonjour et merci beaucoup Rocailleux !
ça marche bien, mais je me suis aperçu que ta commande ne donnait pas le résultat attendu avec les lignes de ce type:
1212625 1252 -rw-rw-r-- 1 toto groland 1276099 déc. 5 04:12 /data/xpl/tmp/F0418293

Visiblement c'est les caractères exotiques du mois "déc" qui empêche le traitement de se faire correctement.
Comment peut-on faire pour gérer néanmoins cette ligne et récupérer le numéro "0418293" ?
Tu as une idée ?
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

$ grep -Po '.*F\K[^.]*' fich 
0413691
0397858
0396850
0401716
0394328
0381021
0383063
0378393
0412689

-1
Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour zipe31,
Merci pour ton aide.
Mais je viens de tester ta commande sur mon fichier "fich" et je n'obtiens aucune réponse...
Je l'applique mal ?
Merci
0
UnGnU Messages postés 1158 Date d'inscription   Statut Contributeur Dernière intervention   158 > Ka-El Messages postés 260 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,
Je l'applique mal ?
Faut croire ;-(

$ cat fichier
Start
Serveur=anonyme
1212596 816 -rw-rw-r-- 1 toto groland 829924 nov. 29 04:35 /data/xpl/tmp/F0413691
1212871 35184 -rw-rw-r-- 1 toto groland 35984440 nov. 6 00:03 /data/xpl/tmp/F0397858.pi99
1212859 58048 -rw-rw-r-- 1 toto groland 59373540 nov. 3 14:22 /data/xpl/tmp/F0396850.pi99
1212891 684 -rw-rw-r-- 1 toto groland 693250 nov. 11 04:10 /data/xpl/tmp/F0401716
1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99
213009 4 -rw-rw-r-- 1 toto groland 1044 oct. 12 17:23 /data/xpl/tmp/F0381021
1212720 4 -rw-rw-r-- 1 toto groland 40 oct. 14 17:29 /data/xpl/tmp/F0383063
1212721 4 -rw-rw-r-- 1 toto groland 2344 oct. 10 15:23 /data/xpl/tmp/F0378393
1212564 632 -rw-rw-r-- 1 toto groland 641737 nov. 28 04:41 /data/xpl/tmp/F0412689
End

$ grep -Po '.*F\K[^.]*' fichier
0413691
0397858
0396850
0401716
0394328
0381021
0383063
0378393
0412689
0
Utilisateur anonyme
 
ça pose problème chez moi aussi, il ne m'affiche que 3 nombres

https://pastebin.com/dQejwhaB
0
UnGnU Messages postés 1158 Date d'inscription   Statut Contributeur Dernière intervention   158 > Utilisateur anonyme
 
Tu peux essayer comme ça
 grep -Po '.*F\K[^.]*|$'
s'il te plaît, merci.
0
Utilisateur anonyme > UnGnU Messages postés 1158 Date d'inscription   Statut Contributeur Dernière intervention  
 
Pas de soucis avec celle ci, tout s'affiche

$grep --version
grep (GNU grep) 2.26

$bash --version
GNU bash, version 4.4.5(1)-release (x86_64-unknown-linux-gnu)
0