1

Bonjour,

Dans un script Bash, je souhaite afficher un contenu situé après une chaine (variable).
Ex : Je cherche ce qu'il y a après "toto tata" dans un fichier qui contient :

deplp
toto tata ok

Grep me renverrait toto tata ok, alors que je veux juste ok

Une idée?

2

sed -nr 's/^toto tata (.*)$/\1/p' tonfichier
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

("simple comme bonjour" hehe)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

je suppose qu'il connait déjà les regexp puisqu'il parle de grep, donc la réponse consiste simplement à passer par sed à la place, qui est un peu plus puissant et permet des opérations de remplacement que grep ne supporte pas ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

-

6

Oki
Sinon j'aurais utilisé cut parce que je sais que mon expression est (à priori) en début de ligne. En calculant la taille de la chaine ça marche aussi, mais c'est moins joli...

7

Ok, ça marche, sauf que ça me renvoie la dernière occurence, et je préfèrerais récupérer la première
Bon, je pige pas encore tout :

sed -nr 's/^toto tata (.*)$/\1/p' tonfichier

On substitue (s) un début de ligne suivi de "toto tata " suivi de n'importe quoi jusqu'à la fin de la ligne par \1/p. (p = print)
C'est quoi \1 ?
Et à quoi sert le -n? Cacher ce qui matche pas?

8

le \1 fait référence à ce qui a été matché dans la première paire de parenthèses : (.*)

dans ce cas, c'est tout ce qui se situe après "toto tata " jusqu'à la fin de la ligne.

le -n sert en effet à ne pas afficher par défaut les lignes du fichier (d'où l'utilisation de "p" quand une ligne nous intéresse).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

Ah oui, mais j'ai un pb : Sed peut travailler sur des variables du bash?
Si je mets "toto tata " dans TMP et que je fais
sed -nr 's/^$TMP(.*)$/\1/p' fichier
il renvoie rien du tout

10

Utilise des doubles quotes pour autoriser l'expansion des variables :
sed -nr "s/^$TMP(.*)$/\1/p" fichier
So much code to write, so little time.

11

thx