Linuxマシンのレッドハット5.1を持っています
右の単一の文字(文字列の最側)のみを置き換える方法
私のsed構文の例(両方の "a"文字が置き換えられているため、良くありません)l
echo machine1a | sed s'/a/b/g'
mbchine1b
しかし、要求された答えは-machine1bであり、mbchine1bではありません
End-of-pattern-spaceパターンを使用できます。パターン $
は、パターンスペースの最後のnull文字列に一致します。このパターンを使用すると、上記のようにrev
の使用を回避できます。
$ echo machine1a | sed 's/a$/b/'
machine1b
% echo machine1a | rev | sed s'/a/b/' | rev
machine1b
Sedだけでこれを行う方法が見つかりません。 N番目の一致のみを置き換えるように指定するs操作へのフラグがありますが、最後から数えても機能しません。
% echo machine1a | sed s'/a/b/2'
machine1b
これは、1つの単純なsed式では不可能です。代わりに、このような何かをしてください。 bashの文字列操作機能を使用します。
var=machine1a; echo "${var%?}b"
ただし、本当にsedが必要な場合は、次のコマンドを実行できます。
echo machine1a | sed s'/\(.*\)\(.\)$/\1b/g'
それが不可能であると言って、上記の混乱のため申し訳ありません。私は通常、bashの文字列処理機能を使用して、この種のことをbashで行います。