使用sed替换引号内指定字符串失败的问题求助
使用sed替换引号内指定字符串失败的问题求助
兄弟,你这问题我太熟了——单引号嵌套冲突搞的鬼!
你看你写的sed命令:
sed -i 's/length_s = '12h'/length_s = '3h'/g' my_files
shell在解析的时候,会把第一个'当作sed命令的起始标记,当它遇到'12h'里的第一个'时,就会误以为sed命令已经结束了,剩下的12h'/length_s = '3h'/g' my_files就变成了一堆无意义的乱码,shell根本不知道怎么执行,所以命令自然跑不通。
给你几个靠谱的解决办法:
方法一:用双引号包裹整个sed命令
因为双引号里允许直接使用单引号,shell不会提前截断命令,这样写最直观:sed -i "s/length_s = '12h'/length_s = '3h'/g" my_files方法二:在单引号内拼接单引号
如果习惯用单引号包裹sed命令,可以用'\''来表示一个单引号(原理是:关闭当前单引号→转义输出一个单引号→重新打开单引号),写法是这样:sed -i 's/length_s = '\''12h'\''/length_s = '\''3h'\''/g' my_files方法三:精准匹配引号内的内容(简化版)
如果你的场景里只需要把length_s后的'12h'换成'3h',也可以把匹配范围缩小到引号内的内容,写法更简洁:sed -i "s/'12h'/'3h'/g" my_files当然这个前提是文件里没有其他地方出现
'12h',避免误替换。
试试上面的方法,应该就能解决问题啦!
备注:内容来源于stack exchange,提问作者Rabah
相关产品推荐
相关产品推荐

