web-dev-qa-db-ja.com

linux + sed-文字列の右端の文字のみを置き換えます

Linuxマシンのレッドハット5.1を持っています

右の単一の文字(文字列の最側)のみを置き換える方法

私のsed構文の例(両方の "a"文字が置き換えられているため、良くありません)l

 echo machine1a | sed s'/a/b/g'

 mbchine1b

しかし、要求された答えは-machine1bであり、mbchine1bではありません

5
Eytan

End-of-pattern-spaceパターンを使用できます。パターン $は、パターンスペースの最後のnull文字列に一致します。このパターンを使用すると、上記のようにrevの使用を回避できます。

  $ echo machine1a | sed 's/a$/b/'
  machine1b
8
Dmitri Chubarov
% echo machine1a | rev | sed s'/a/b/' | rev
machine1b

Sedだけでこれを行う方法が見つかりません。 N番目の一致のみを置き換えるように指定するs操作へのフラグがありますが、最後から数えても機能しません。

% echo machine1a | sed s'/a/b/2'
machine1b
2
mgorven

これは、1つの単純なsed式では不可能です。代わりに、このような何かをしてください。 bashの文字列操作機能を使用します。

var=machine1a; echo "${var%?}b"

ただし、本当にsedが必要な場合は、次のコマンドを実行できます。

echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g'

それが不可能であると言って、上記の混乱のため申し訳ありません。私は通常、bashの文字列処理機能を使用して、この種のことをbashで行います。

1
milosgajdos