最終的な目的は、^NULL^ のすべてのインスタンスを ^^ に置き換えることです。この質問では、読みやすくするために、^NULL^ を ^fred^ に置き換えてみます。これが私のテストデータです。
/usr/redbrick_dir $ cat temp
a^NULL^b^c^
e^NULL^NULL^f^
g^h^i^NULL^
これが私が期待していることです。
/usr/redbrick_dir $ cat temp | sed "s/\^NULL\^/\^fred\^/g"
a^fred^b^c^
e^fred^NULL^f^
g^h^i^fred^
2 行目では、^NULL^ の最初のインスタンスのみが置換されていることに注意してください。ただし、区切り文字を 1 つだけ指定してコマンドを実行すると、
/usr/redbrick_dir $ cat temp | sed "s/NULL\^/fred\^/g"
a^fred^b^c^
e^fred^fred^f^
g^h^i^fred^
望ましい結果が得られます。末尾の区切り記号のみを使用すると、これらの結果も得られます。問題は、このコマンドが ^NULL^ の最初のインスタンスのみを置き換えるのはなぜですか?
cat temp | sed "s/\^NULL\^/\^fred\^/g"
ここから編集開始
以下に投稿されたいくつかの回答を試したときに何が起こったのかを次に示します。
cat temp | sed "s/(?<=\^)NULL(?=\^)/fred/g"
a^NULL^b^c^
e^NULL^NULL^f^
g^h^i^NULL^
cat temp | sed ":a s/\^NULL^/^fred^/;ta"
sed: 0602-417 The label :a s/\^NULL^/^fred^/;ta is greater than eight characters.
Utopik が提供するリンクを確認する必要があります。