Script shell extraction de texte precis
Résolu
Lalex'
-
Lalex' -
Lalex' -
Bonjour,
Je souhaite, a l'aide d'un script shell, extraire une partie d'un fichier txt. Cette partie est comprise entre deux motifs identiques et doit contenir une variable précise.
exemple fichier d'entrée:
motif
motif
motif
motif
motif
blablablablablablablablablabla
blablablablablablablablablabla
variable1
blablablablablablablablablabla
blablablablablablablablablabla
motif
motif
motif
blablablablablablablablablabla
blablablablablablablablablabla
variable2
blablablablablablablablablabla
blablablablablablablablablabla
motif
motif
motif
motif
motif
motif
je souhaite extraire la partie du texte entre deux "motif" contenant "variable1", soit le fichier en sortie:
blablablablablablablablablabla
blablablablablablablablablabla
variable1
blablablablablablablablablabla
blablablablablablablablablabla
je galère avec des substractions sed que je maitrise pas bien, pouvez vous m'aider a résoudre ma problématique?
merci par avance
Je souhaite, a l'aide d'un script shell, extraire une partie d'un fichier txt. Cette partie est comprise entre deux motifs identiques et doit contenir une variable précise.
exemple fichier d'entrée:
motif
motif
motif
motif
motif
blablablablablablablablablabla
blablablablablablablablablabla
variable1
blablablablablablablablablabla
blablablablablablablablablabla
motif
motif
motif
blablablablablablablablablabla
blablablablablablablablablabla
variable2
blablablablablablablablablabla
blablablablablablablablablabla
motif
motif
motif
motif
motif
motif
je souhaite extraire la partie du texte entre deux "motif" contenant "variable1", soit le fichier en sortie:
blablablablablablablablablabla
blablablablablablablablablabla
variable1
blablablablablablablablablabla
blablablablablablablablablabla
je galère avec des substractions sed que je maitrise pas bien, pouvez vous m'aider a résoudre ma problématique?
merci par avance
A voir également:
- Script shell extraction de texte precis
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Transcription audio en texte word gratuit - Guide
- Excel cellule couleur si condition texte - Guide
5 réponses
en entrée:
[...]
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Fonctionnaire</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
11:24:19,949 | DEBUG | pool-component.servicemix-file/ORGAN
11:24:19,950 | DEBUG | pool-component.servicemix-file/OPX2
11:24:19,951 | DEBUG | pool-component.servicemix-file/ORGAN2
11:24:19,952 | DEBUG | pool-component.servicemix-file/OPX23
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Libéral</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
11:24:19,949 | DEBUG | pool-component.servicemix-file/ORGAN
11:24:19,950 | DEBUG | pool-component.servicemix-file/OPX2
11:24:19,951 | DEBUG | pool-component.servicemix-file/ORGAN2
11:24:19,952 | DEBUG | pool-component.servicemix-file/OPX23
[...]
si je rentre en paramètre "fonctionnaire" je voudrais en fichier sortie:
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Fonctionnaire</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
et si je rentre ne parametre "libéral" je voudrais en fichier sortie:
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Libéral</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
Le but ultime étant de rendre plus lisible et compréhensible un fichier de LOG très lourd en filtrant les passage interessant pour l'utilisateur.
[...]
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Fonctionnaire</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
11:24:19,949 | DEBUG | pool-component.servicemix-file/ORGAN
11:24:19,950 | DEBUG | pool-component.servicemix-file/OPX2
11:24:19,951 | DEBUG | pool-component.servicemix-file/ORGAN2
11:24:19,952 | DEBUG | pool-component.servicemix-file/OPX23
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Libéral</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
11:24:19,949 | DEBUG | pool-component.servicemix-file/ORGAN
11:24:19,950 | DEBUG | pool-component.servicemix-file/OPX2
11:24:19,951 | DEBUG | pool-component.servicemix-file/ORGAN2
11:24:19,952 | DEBUG | pool-component.servicemix-file/OPX23
[...]
si je rentre en paramètre "fonctionnaire" je voudrais en fichier sortie:
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Fonctionnaire</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
et si je rentre ne parametre "libéral" je voudrais en fichier sortie:
[...]
<user_description>
<departmentNumber>DGA/DQP/CTSI/SDCIS/Site-SQ</departmentNumber>
<departmentNumberOpe>DGA/DQP/SQ/AG/EI:100</departmentNumberOpe>
<description>Technicien support informatique:40</description>
<descriptionMetier>Informatique:100</descriptionMetier>
<descriptionPole/>
<descriptionPoste>Technicien d'exploitation et soutien informatique</descriptionPoste>
<employeeType>Libéral</employeeType>
<facsimileTelephoneNumber>+33 5 62 21 04 36</facsimileTelephoneNumber>
<givenName>Josian Guy</givenName>
[...]
Le but ultime étant de rendre plus lisible et compréhensible un fichier de LOG très lourd en filtrant les passage interessant pour l'utilisateur.
Salut,
Les motifs sont identiques ou différents à chaque fois ?
Les motifs sont identiques ou différents à chaque fois ?
Les motifs contiennent une même chaine de caractères uniques, les voici:
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
Si les logs sont toujours les mêmes, alors un simple "egrep" suffit :
egrep -B7 -A2 "(Fonctionnaire|Libéral)" fichier.log;-))
Merci pour ta proposition:
egrep -B7 -A2 "(Fonctionnaire|Libéral)"
que signifie les B7 et A2?
par contre les [...] que j'ai ajouté dans le fichier d'entrée signifie que le nombre de "motif" successifs et le nombre de lignes a extraire sont variables (simplement pour réduire la log énorme).
Les logs ne sont donc identiques:
Serait-il possible de détecter les partie de logs entre deux motif successifs qui contiennent les chaines voulues "(Fonctionnaire|Libéral)"?
J'espère vraiment me faire comprendre, désolé si c'est pas très clair...
Merci.
egrep -B7 -A2 "(Fonctionnaire|Libéral)"
que signifie les B7 et A2?
par contre les [...] que j'ai ajouté dans le fichier d'entrée signifie que le nombre de "motif" successifs et le nombre de lignes a extraire sont variables (simplement pour réduire la log énorme).
Les logs ne sont donc identiques:
Serait-il possible de détecter les partie de logs entre deux motif successifs qui contiennent les chaines voulues "(Fonctionnaire|Libéral)"?
J'espère vraiment me faire comprendre, désolé si c'est pas très clair...
Merci.
que signifie les B7 et A2?
B = Before donc les 7 lignes précédent le motif
A = After, les 2 lignes suivant le motif
Sinon, essaye ça :
B = Before donc les 7 lignes précédent le motif
A = After, les 2 lignes suivant le motif
Sinon, essaye ça :
sed -n '/OPX23/{:z;N;/ORGAN/!bz;{/Fonctionnaire\|Libéral/{s/.[^\n]*\n\(.*\)\n.*/\1/p}}}' fichier;-))
MERCI
ca marche du tonnerre ton expression!!
par contre, les "motifs" sont récursifs et ils bouclent tant qu'il ne se passe rien et par conséquent, le dernier motif qui apparait avant le texte a extraire n'est pas toujours le meme...
sed -n '/OPX23/{:z;N;/ORGAN/!bz;{/Fonctionnaire\|Libéral/{s/.[^\n]*\n\(.*\)\n.*/\1/p}}}' fichier.log
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
[...]
C'est pour cela que je voulais chercher les "DEBUG | pool-component.servicemix-file" qui, eux sont toujours présnets
ca marche du tonnerre ton expression!!
par contre, les "motifs" sont récursifs et ils bouclent tant qu'il ne se passe rien et par conséquent, le dernier motif qui apparait avant le texte a extraire n'est pas toujours le meme...
sed -n '/OPX23/{:z;N;/ORGAN/!bz;{/Fonctionnaire\|Libéral/{s/.[^\n]*\n\(.*\)\n.*/\1/p}}}' fichier.log
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
11:23:18,972 | DEBUG | pool-component.servicemix-file/OPX23
11:23:18,969 | DEBUG | pool-component.servicemix-file/ORGAN
11:23:18,970 | DEBUG | pool-component.servicemix-file/OPX2
11:23:18,971 | DEBUG | pool-component.servicemix-file/ORGAN2
[...]
C'est pour cela que je voulais chercher les "DEBUG | pool-component.servicemix-file" qui, eux sont toujours présnets
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question