Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/12/2016, à 22:23

joseberlin

Problème de recherche de chaîne de caractères

Bonjour à tous,

Je vous expose mon problème. J'ai un fichier texte comme décrit ci-dessous:

PREMIERE_ERREUR
a
b
c
d
texte à trouver
e
f
g
DEUXIEME_ERREUR

Je dois retrouver la chaîne de caractère "texte à trouver". A partir de cette chaîne de caractères, je dois remonter jusqu'à la chaîne PREMIERE_ERREUR et descendre jusqu'à DEUXIEME_ERREUR.

Au final je souhaiterai que soit affiché dans un nouveau fichier texte:

PREMIERE ERREUR
texte à trouver
DEUXIEME ERREUR 

Les intervalles entre PREMIERE_ERREUR et DEUXIEME_ERREUR peuvent varier, d'où ma question: quelle commande ou code en script shell peut répondre à ce besoin?

D'avance merci! :-)

Hors ligne

#2 Le 08/12/2016, à 06:30

Watael

Re : Problème de recherche de chaîne de caractères

salut,

on ne peut pas faire remonter l'eau de la rivière.
par contre, on va conserver les données pertinentes, et les afficher si on a rencontré le "texte à trouver".

comment identifies-tu "PREMIERE_ERREUR' et "DEUXIEME_ERREUR" ?
peut-il y avoir du texte avant et/ou après ?


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#3 Le 08/12/2016, à 08:00

pingouinux

Re : Problème de recherche de chaîne de caractères

Bonjour,
En plus des questions de Watael, peut-il y avoir plusieurs séquences PREMIERE_ERREUR ... DEUXIEME_ERREUR dans le fichier ?

Hors ligne

#4 Le 08/12/2016, à 08:21

joseberlin

Re : Problème de recherche de chaîne de caractères

Merci pour vos retours.

Alors effectivement dans le fichier on peut trouver plusieurs fois les chaînes PREMIERE_Erreur et DEUXIÈME_ERREUR.

J'ai pensé à faire ceci:
Grep -B 10 "message a trouver" | grep -i "PREMIERE_ERREUR"
Cela permet de remonter 10 lignes avant le message a trouver.

Toutefois, j'ai peur de tomber sur d'autres chaînes du type "PREMIERE_ERREUR".

Sinon, première et deuxième erreur ne sont pas les 1er éléments du fichier. Il y a du texte au dessus et en dessous.

J'ai aussi pensé à faire une boucle du style:

Pour i de 1 a 10
Si grep -B i "message a trouver" | grep -i "PREMIERE ERREUR" = vrai
Alors on sort de la boucle

Mais je ne sais comment coder cela en script Shell :-/

Merci!

Hors ligne

#5 Le 08/12/2016, à 08:39

pingouinux

Re : Problème de recherche de chaîne de caractères

Voici une suggestion en python

#!/usr/bin/python
import re, sys

fichier=sys.argv[1]
texte  =sys.argv[2]

rec=re.compile('(PREMIERE_ERREUR).*?(%s).*?(DEUXIEME_ERREUR)'%texte,re.S)

with open(fichier,"r") as f: txt=f.read()
sequences=rec.findall(txt)
for seq in sequences:
   print("")
   for i in seq: print(i)

À appeler ainsi

./le_script fichier "texte à trouver"

Hors ligne

#6 Le 08/12/2016, à 08:50

joseberlin

Re : Problème de recherche de chaîne de caractères

Merci beaucoup pour ce code pythonesque :-)

Le "hic" c'est que le python est proscrit dans mon entreprise...

Hors ligne

#7 Le 08/12/2016, à 09:04

Compte anonymisé

Re : Problème de recherche de chaîne de caractères

ma proposition :

grep -Ei '(_ERREUR|texte à trouver)' fichier.txt | grep -B 1 -A 1 "texte à trouver"

tu passes le fichier avec grep et tu conserves que les lignes intéressantes, et ensuite tu affiches la ligne avant et après du texte à trouver.

Dernière modification par Compte anonymisé (Le 08/12/2016, à 09:08)

#8 Le 08/12/2016, à 10:13

k3c

Re : Problème de recherche de chaîne de caractères

>>>Le "hic" c'est que le python est proscrit dans mon entreprise...

ah ils ont bien raison, un langage illisible, impossible à maintenir, connu par une poignée d'illuminés... On t'a expliqué pourquoi ?
Et quels langages sont "recommandés" ?

Dernière modification par k3c (Le 08/12/2016, à 10:14)


Archlinux sur Xiaomi Air 13

Hors ligne

#9 Le 08/12/2016, à 11:59

Watael

Re : Problème de recherche de chaîne de caractères

et sed ? t'as droit à sed ?


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#10 Le 08/12/2016, à 12:55

credenhill

Re : Problème de recherche de chaîne de caractères

hello
et avec awk ?

$ awk '/PREMIERE_ERREUR/ {t1=$0} /texte à trouver/ {t2=$0} /DEUXIEME_ERREUR/ && t2 {print t1 RS t2 RS $0; t2=""}'  fichier
PREMIERE_ERREUR
texte à trouver
DEUXIEME_ERREUR

Hors ligne

#11 Le 08/12/2016, à 16:24

joseberlin

Re : Problème de recherche de chaîne de caractères

Bravo Crendenhill!!

Merci c'est exactement le résultat que je voulais.

Merci a tous pour votre aide.

Hors ligne