Shell中使用sed变量替换含空格字符串时[[:space:]]未生效如何解决?
错误原因
[[:space:]]是正则匹配语法,仅在查找模式中用于匹配空白字符,不能写在替换内容里,替换内容直接写真实空格即可- 单引号包裹的sed表达式无法展开shell变量,额外使用
eval属于冗余操作,还会引入命令注入风险
修正后脚本
#!/bin/sh # 查找模式保留正则写法,匹配任意空白分隔的目标串 ORI_LINE="is[[:space:]]teddy[[:space:]]bear" # 替换内容直接写最终需要的字符串即可 NEW_LINE="is sleepy bear" # 用双引号包裹sed表达式,让变量正常展开 sed -i -e "s/$ORI_LINE/$NEW_LINE/g" ./hello.txt
兼容提示
如果你在MacOS系统运行,sed的-i参数需要额外传空字符串作为备份后缀,命令改为:
sed -i '' -e "s/$ORI_LINE/$NEW_LINE/g" ./hello.txt
内容的提问来源于stack exchange,提问作者IsaIkari
相关产品推荐
相关产品推荐

