Конечной целью является замена всех экземпляров^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"
Edit начинается здесь
Вот что случилось, когда я попробовал пару ответов, размещенных ниже.
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.