2013-02-27 4 views
1

Je suis en train de grep pour des quantités individuelles dans les lignes comme celle-ci:comment extraire ces champs via sed?

foo=24.587 bar=88 fox=jobs 

et l'extrait, par exemple, tous les « 88 » est pas values..the de nombre de colonnes restent cohérentes si AWK suivie d'une coupe ne le coupera pas.

J'ai essayé avec sed comme ceci:

sed -e 's/.*\s\(bar=.+\)\s.*/\1/g' 

et qui vient dumps la ligne. Je ne suis pas sûr de savoir comment corriger cette expression rationnelle, et plus important encore pourquoi cette expression rationnelle ne fait pas ce que j'attends?

+0

Essayez-vous de faire correspondre 'bar = 88' ou' = 88' et auriez-vous besoin de plusieurs correspondances par ligne? – Scrutinizer

Répondre

1

Utilisez -r (expression régulière étendue). Cela tend à utiliser regexen plus comme vous pouvez vous y attendre. Vous devez cependant supprimer les antislashs des parenthèses:

$ echo "foo=24.587 bar=88 fox=jobs" | sed -r 's/.*\s(bar=.+)\s.*/\1/g' 
bar=88 
+0

Cool! Assez intéressant, si je fais ceci: echo "tau = 39,05 dos = 200 iv = 2 bar = 39,05 foo = 39,06 fox = emplois" | sed -r 's /.* \ s (bar =. +) \ s. */\ 1/g' J'obtiens la barre et le truc! –

+0

@PalaceChan utilise 's /.* \ s (bar = [^] +) \ s. */\ 1/g''. Malheureusement, 'sed' ne permet pas de quantificateurs réticents –

+0

je vois, trixy trixy. THanks –

Questions connexes