我已经写了sed
脚本,用^^
替换所有NULL
。虽然sed
似乎只捕获了一对,但不包括该对中的第二个,因为它继续搜索。
echo "^^^^" | sed 's/\^\^/\^NULL\^/g'
产生
^NULL^^NULL^
什么时候应该产生
^NULL^NULL^NULL^
答案 0 :(得分:4)
尝试使用循环将命令再次应用于修改的模式空间:
echo "^^^^" | sed ':a;s/\^\^/\^NULL\^/;t a;'
要在OSX上编辑文件,请尝试-i
标志和多行命令:
sed -i '' ':a
s/\^\^/\^NULL\^/
t a' file
使用GNU sed:
sed -i ':a;s/\^\^/\^NULL\^/;t a;' file
或者只是在重命名命令之前将命令重定向到临时文件:
sed ':a;s/\^\^/\^NULL\^/;t a;' file > tmp && mv tmp file
答案 1 :(得分:1)
我非常喜欢SLePort解决方案,但由于它不适合您,您可以尝试(在Linux上测试,而不是Mac):
echo "^^^^" | sed 's/\^\^/\^NULL\^/g; s//\^NULL\^/g'
它与前一种解决方案的作用相同,但明确地说,不是使用标记循环。
您可以省略第二个命令中的模式,sed将使用上一个模式。