web-dev-qa-db-ja.com

一致から行末への置換

これは信じられないほど簡単なはずですが、動作させることはできません。 sedを使用して、1つの文字列から行末までを置き換えたいだけです。たとえば、次のデータファイルがある場合:

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

そして、単語 "two"から行末までを、単語 "BLAH"で置き換えて、出力に置き換えたいと思います。

   one BLAH
   four BLAH
   six one BLAH

それだけではありません:

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

私は多分それが問題だと正規表現で最高ではありません

27
GregH

これはあなたが望むことをするはずです:

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

$.*はとにかく行末で終了し、最初の一致は行末までの最初のgになるため、末尾のtwoは不要です。

53
Andrew Clark

これを使用して、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