web-dev-qa-db-fra.com

Remplacement de la correspondance en fin de ligne

Cela devrait être incroyablement facile, mais je ne peux pas le faire fonctionner. Je veux juste utiliser sed pour remplacer d'une chaîne à la fin d'une ligne. Par exemple, si j'ai le fichier de données suivant:

   one  two  three  five
   four two  five five six
   six  one  two seven four

et je veux remplacer du mot "deux" jusqu'à la fin de la ligne par le mot "BLAH" se terminant par la sortie:

   one BLAH
   four BLAH
   six one BLAH

ça ne serait pas juste:

   sed -e 's/two,$/BLAH/g'

Je ne suis pas le meilleur en regex, c'est peut-être le problème

27
GregH

Cela devrait faire ce que vous voulez:

sed 's/two.*/BLAH/'

$ echo "   one  two  three  five
>    four two  five five six
>    six  one  two seven four" | sed 's/two.*/BLAH/'
   one  BLAH
   four BLAH
   six  one  BLAH

Le $ n'est pas nécessaire car le .* se terminera quand même à la fin de la ligne, et le g à la fin n'est pas nécessaire car votre première correspondance sera le premier two à la fin de la ligne.

53
Andrew Clark

Utilisez ceci, two<anything any number of times><end of line>

's/two.*$/BLAH/g'
11
Erik

awk

awk '{gsub(/two.*/,"")}1' file

Ruby

Ruby -ne 'print $_.gsub(/two.*/,"")' file
3
kurumi