Récupération de chaîne en bash
Résolu
Bonjour,
J'aimerais savoir comment je peux récupérer des lignes entre deux autre lignes déja connu sans la commande sed en bash.
Par exemple jai comme fichier:
kefjkef
egfdg
rgtdrg
P18
,fdjkg
dfhgf
fghg
C04
dgrygtr
dfg
et je veux à la fin avoir que ce qu'il y a en dessous de P18 et au dessus de C04:
fichier final:
,fdjkg
dfhgf
fghg
Merci de votre aide
J'aimerais savoir comment je peux récupérer des lignes entre deux autre lignes déja connu sans la commande sed en bash.
Par exemple jai comme fichier:
kefjkef
egfdg
rgtdrg
P18
,fdjkg
dfhgf
fghg
C04
dgrygtr
dfg
et je veux à la fin avoir que ce qu'il y a en dessous de P18 et au dessus de C04:
fichier final:
,fdjkg
dfhgf
fghg
Merci de votre aide
3 réponses
-
Tu peux lire le fichier ligne par ligne et quand tu arrives sur la ligne qui correspond au debut de section à extraire, entrer dans une boucle qui écrit au bon endroit les lignes à extraire jusqu'à rencontrer la ligne qui marque la fin de la zone à extraire.
https://forums.commentcamarche.net/forum/affich-37620017-comment-lire-un-fichier-ligne-par-ligne
http://www.laboiteaprog.com/article-70-3-bash_introduction
De toute façon sed n'aurait pas été le plus pratique pour ce que tu veux faire (voire n'aurait pas permis de le faire simplement). Je serais plutôt parti awk ou sur un script purement shell comme celui que je t'ai indiqué... sachant qu'en awk c'est plus facile à écrire.
Bonne chance-
-
Merci je vais essayer.
Oui je sais qu'avec sed ça aurait été plus simple jipicy, mais il ne veut pas me le faire sur une carte électronique, il me crée toujours un dossier vide, alors que si je le fais directement dans l'ordinateur ça marche. J'ai essayé pleins de truc, si je met une commande pour récupérer les dernière ligne avec tail ça marche très bien, mais avec sed ça marche pas du tout. Saurais tu pourquoi? -
-
-
-
-
Ah effectivement jipicy je ne connaissais pas cette syntaxe (en fait je ne pensais pas que sed pouvait travailler sur un groupes de lignes, je croyais qu'il raisonnait ligne par ligne).
Merci pour ces précisions.-
Un peu de lecture pour les chaudes soirées d'été ;-))
-
-
-
-
Comme ça :
script.awk
/C04/{ extraire = 0 } { if (extraire == 1){ print $0; } } /P18/{ extraire = 1 }
Certes c'est plus long à écrire mais je trouve ça plus clair et plus facile à généraliser ou à étendre. Enfin après chacun ses goûts, moi je trouve la syntaxe sed parfois peu parlante.
awk -f script.awk fichier.txt