区切り文字が3番目に表示されるまで文字列部分を置き換える方法は?

区切り文字が3番目に表示されるまで文字列部分を置き換える方法は?

私はこのような文字列を持っています

AAA: BBB: CCC: DDD: EEE

交換する必要があります

AAA: BBB: CCC:

そして

FF:

だからそれは

FFF: DDD: EE

ありがとうございます。

答え1

GNUsedと拡張正規表現(-r)を使用すると、次のことが機能します。

sed -r "s/^([^:]*:){3}/FFF:/"

sed <...> filename.txtまたはecho "$original_string" | sed <...>

これは、行の先頭()で始まり、「コロンを除くすべての項目()」と、パターン付きのコロンで構成されるパターンを^3回連続して含む部分文字列を置き換えます。[^:]FFF:

答え2

以下を使用できます。

$ sed -e 's/:/\n/3;s/.*\n/FFF:/' file

ここでは、n番目の変更n <= 512を実装するためにsedの関数を使用します。さらに、改行は、G、H、Nを介して事前に導入されているか、私たちの例のようにリテラル改行が追加されていない限り、パターン空間には見えないことが保証されています.

これはヌセパ(Gnu Seism)です。 Posix sedはエスケープされたリテラル改行文字を使用します。

関連情報