afficher les lignes d’un fichier comprises entre une ligne commençant par bonjour et
une autre se terminant par au revoir.
j'ai essayer avec :, mais rien s'affiche.Code:grep "^bonjour.*au revoir$" nom_fichier
quelqu'un m'aide et merci !!!
Version imprimable
afficher les lignes d’un fichier comprises entre une ligne commençant par bonjour et
une autre se terminant par au revoir.
j'ai essayer avec :, mais rien s'affiche.Code:grep "^bonjour.*au revoir$" nom_fichier
quelqu'un m'aide et merci !!!
BONJOUR !
grep n'est pas le bon outil pour chercher des motifs sur plusieurs lignes.
il vaut mieux utiliser sed.
/!\ le caractère $ est un caractère spécial du shell, qui sera interprété entre guillemets.
pour que cela n'arrive pas, il faut soit le protéger (\$), soit (ce qu'on fait le plus souvent) écrire les regex entre apostrophes.
Je ne suis pas familier avec la commande sed.
vous pouvez m'aider avec un exemple et merci !
L'instruction grep '^bonjour.*au revoir$' nom_fichier permet d'afficher les lignes commençant par bonjour et se terminant par au revoir, comme: "bonjour, ce n'est qu'un au revoir", par exemple.
Sinon, voir sed -n -e '<range>p' <file> où <range> est de la forme <match>,<match> où <match> est de la forme /<motif>/ où <motif> est une regexp... :mouarf:
Salut,
ou une petite boucle :p
ex :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 # Boucle traitant les lignes une à une while read ligne do # Si la variable Afficher vaut True (elle vaut False si elle n'existe pas) if [[ "${Afficher:-False}" == "True" ]] then # On affiche la ligne echo "${ligne}" # Si la ligne se termine par au revoir, on passe Afficher à False [[ "${ligne: -9}" == "au revoir" ]] && Afficher=False # Si la variable Afficher ne vaut pas True else # Si la ligne commence par bonjour, on passe la variable Afficher à True et on affiche la ligne [[ "${ligne:0:7}" == "bonjour" ]] && { Afficher=True; echo "${ligne}"; } fi done < fichier
Oui je combine [[ ]] et "" et oui j'utilise trop ${} et oui il y a plus simple... mais heuuu ! Je fais qu'est-ce que je veux :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 cat fichier ce texte ne sera pas afficher ce texte ne sera pas afficher bonjour jacko ce texte sera afficher ce texte sera afficher ce texte sera afficher meme s'il contient bonjour ce texte sera afficher meme avec au revoir tant qu'il ne finit pas avec jacko au revoir ce texte ne sera pas afficher # La commande renvoie : bonjour jacko ce texte sera afficher ce texte sera afficher ce texte sera afficher meme s'il contient bonjour ce texte sera afficher meme avec au revoir tant qu'il ne finit pas avec jacko au revoir
Merci à vous , j'ai bien trouver la solution à cet exercice :
:D:D:D:mrgreen::mrgreen:Code:sed '/^bonjour/,/au revoir$/!d' nom_fichier
ou bien:
Code:sed -n -e '/^bonjour/,/au revoir$/p' nom_fichier