[Shell Unix] supprimer début d'un fichie

Philippe -  
jipicy Messages postés 41342 Statut Modérateur -
Bonjours tout le monde,

Je dispose de plusieurs fichiers texte, j'aimerais pouvoir supprimer la partie du fichier du début jusqu'à un caractère unique mais dont la position varie d'un fichier à l'autre.

ex :

'Je m'appelle philippe @ j'ai 25 ans et j'habite Grenoble (...) '

Ici je voudrais supprimer toute la partie avant '@' et garder le reste en envoyant le résultat dans un nouveau fichier.

Voilà, j'espère avoir été assez clair.

PS : la boucle pour lire tout les fichiers ne me pose pas de problème mais c'est vraiment ce problème de suppression que me gêne, je suppose qu'une combinaison de 'awk' et 'cut' est la solution mais je débute et ne comprend pas toutes les ficelles du awk.

Merçi d'avance.
A voir également:

4 réponses

yoann_tux Messages postés 445 Statut Membre 95
 
on peu le faire en C ? :s
c'est ptete plus simple ^^
en gros tu fait
ouvrir fichier
lecture caractère par caractère...
et dès que tu le trouves
tu écris tous les caractères restant dans ton nouveau fichier
tu fermes les 2 fichiers
et vala :)
0
ekra Messages postés 1873 Statut Membre 342
 
Bonjour

$ cut -d "@" -f2 fichier >fichier_sortie

Edit : j'ai cru qu'il y en avait un par ligne donc ce n'est pas bon désolé.
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,
sed -r 's/.*(@.*)/\1/' < fichier > fichier.out
;-)
0
philippe
 
Super merçi de vos réponse ! Seulement y'a un petit problème...Les fichiers que je traite sont organisé en colonnes, le cut enleve donc toutes les colonnes avant le caractère rentré en paramètres et non pas tout ce qu'il y a avant c'est-à-dire ce qu'il y a au dessus.

Voilà, je vais essayer avec un awk cela me semble plus logique.

Merçi.
0
philippe
 
C'est bon j'ai trouvé une solution avec 'awk' :

awk '/Sta/,/^$/' $FILE > tmp1

qui elimine toutes les lignes avant la chaîne de caractères 'Sta' en conservant celles qui suivent.
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
C'est ton exemple qui nous a induit en erreur ;-)

Sinon, avec "sed" ça donne :
sed  '/Sta/,$!d'
ou
sed -n '/Sta/,$p'
Au choix ;-))
0