Le fichier change et s’allonger avec plus ou moins de lignes mais il respectera toujours ce format. J’essaye de faire un script qui permettrait de venir récupérer les données dans les accolades et les mettre dans un autres fichier txt.
J’ai essayé avec awk mais je n’arrive pas à trouver les bonnes commandes et c’est galère sniff.
Donc, commençons par définir le format de ce fichier.
Je vais appeler ce fichier : fichierSource.txt
Si je me base sur le contenu du fichier que tu nous donnes en exemple :
il y aura dans ton fichier des lignes (contenant une suite de 27 caractères ASCII) mais qui ne contiendra aucun caractère de séparation ni de ponctuation .
et certaines de ces lignes seront encadrées par les caractères { }
et d’autres lignes du même format seront ajoutées dans ce fichier.
Est-ce bien ça ?
Sinon, il faudra nous dire quelles sont les contraintes manquantes.
Je vais appeler l’autres fichier txt : fichierCible.txt
Quel langage de script va être utilisé ?
À quel moment sera lancé le script ?
juste après chaque ajout d’une ligne dans fichierSource.txt ?
ou alors à n’importe quel moment ?
est-ce qu’il y aura des caractères { ou } autre part qu’au début et à la fin de chaque ligne ?
est-ce que, comme dans l’exemple, chaque ligne se termine par un retour à la ligne ?
est-ce que les données récupérées devront êtres ajoutées à un endroit précis dans fichierCible.txt ?
ou alors est-ce que les données récupérées devront être ajoutées dans une nouvelle ligne à la fin de fichierCible.txt ?
michel@debbull:~$ while read -r; do [[ $REPLY =~ ^\{([^}]*) ]] && echo "${BASH_REMATCH[1]}"; done < fichierSource.txt >> fichierCible.txt
michel@debbull:~$
michel@debbull:~$ cat fichierCible.txt
badaboumyoupie
petitpatapon
hippopotameentutu
!:ù6576ku yhtyu jyyti -(è-(
bli bli bli bli bli bli bli
aaa eee rrr tt b
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
pppppppppppppp ppppppp
michel@debbull:~$
Telle quelle est, la ligne de commande bash que j’ai proposée ne recopiera à la fin de fichierCible.txt que ce qui est dans les lignes contenues dans fichierSource.txt
qui commencent par un caractère { jusqu’au premier caractère } trouvé (caractères { et } exclus).
Mais en fonction des réponses que Le_GensBon donnera aux questions posées dans mon précédent message, on pourra peut-être adapter tout ça à ce qu’il cherche à obtenir.
Ah, tu veux plutôt dire grep -i '{.*}' fichier.txt | sed 's/[{}]//g' > newfichier.txt ?
Le cat ne sert à rien vu que grep sait très bien ouvrir des fichiers (voir « useless use of cat ») et si tu ne mets pas l’option g dans la substitution de sed, seule l’accolade ouvrante sera traitée (la première correspondance de la ligne).