sed 替换括号

我试图使用这个命令:
sed -i ‘s#{test1}#test2#’ /example/myfile.txt
用test2替换{test1}的实例.



我得到错误:



sed: -e expression #1, char 17: Invalid preceding regular expression



sed 查找的时候你不需要转义括号,但是\需要转义



比如
$ cat my.text.bak
afgsh{{wasfgh}}tty
weretry_q_q{{}}{hgsgf
svgh}}fghfj
cvf



$sed -i .bak ‘s/{{/\{\{/g’ my.text
$cat my.text
afgsh{{wasfgh}}tty
weretry{{hgsgf
svgh}}fghfj
cvf



mac上sed -i 执行失败报错
linux环境下:执行sh sed_shell.sh “1.2” 命令就可以把verison.txt的老版本号换成新版本号。



但是mac上执行就会报错“invalid command code C”,查看mac sed 发现如下:
需要一个中间文件来转换下,比如我们上面的sed命令在mac上可以替换成sed -i n.tmp s/$old_version/$new_version/g version.txt ,其实执行这条的时候会生成一个version.txt_n.tmp文件,这个不需要的文件,执行后删除即可。



https://www.cnblogs.com/zndxall/p/10456929.html



Mac上使用sed命令时,报出sed: 1: “1.txt”: invalid command code .错误。是由于Mac上sed命令与linux下稍有不同。Mac上默认提供修改时的备份机制。



解决方案
如果目标文件不需要备份
sed -i “” ‘s/string_old/string_new/g’ grep -rl ‘string_old’ ./
如果目标文件需要备份



sed -i “.bak” ‘s/string_old/string_new/g’ grep -rl ‘string_old’ ./



https://www.cnblogs.com/crazymagic/p/11148193.html



sed -i .bak ‘s/{{/\{\{/g’ my.text
rm my.text.bak



Category linux