Mac OS下使用sed替换含特殊字符的字符串失败求助
解决Mac OS下sed替换失败的问题
原命令的问题
- BSD sed的
-i参数格式错误:Mac自带的是BSD版本sed,-i后若不需要备份文件,必须写-i ''(空字符串),你用的-i ' '会生成带空格后缀的备份文件,还可能导致命令解析异常。 - 转义规则复杂易出错:原命令的转义逻辑本身没问题,但因要匹配的特殊字符较多,容易出现疏漏。
两种解决方案
方案一:精准匹配目标字符串(修正后命令)
调整参数格式后,即可正常执行:
sed -i '' 's~\.\*app\\\.com\$\|localhost\$\|127\\\.0\\\.0\\\.1\$~\*~g' file.txt
方案二:更简洁的全局替换(推荐)
直接匹配sec.val.hos.patn=后的所有内容替换为*,命令更简单且不易出错:
sed -i '' 's/sec\.val\.hos\.patn=.*/sec.val.hos.patn=*/' file.txt
逻辑说明:找到以sec.val.hos.patn=开头的行,将=后面的所有内容替换成*,完全满足需求。
内容的提问来源于stack exchange,提问作者bbajagain
相关产品推荐
相关产品推荐

