最终目标是用 ^^ 替换 ^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^ 的第一个实例。但是,如果我只使用一个分隔符运行命令,
/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 提供的链接。