Sed加了x27而不是单引号

时间:2018-12-20 09:06:17

标签: sed

我正在尝试使用路由器设备中的/x27用单引号替换一行文本,以重新配置wifi设置。

我使用的命令

sed -i 's/option ssid.*/option ssid \x27test\x27/g' /some/file

我在计算机上执行上述命令后的输出(ubuntu 18)

option ssid 'test123'

我在路由器上执行上述命令后的输出

option ssid x27test123x27

预期输出应为

option ssid 'test123'

所以我的代码在路由器上无法正常工作。如何使用/ x27做到这一点? 注意:我正在外壳脚本中执行此脚本,\ x27test \ x27实际上是\ x27 $ OPTARG \ x27

您可以找到我的完整代码here

2 个答案:

答案 0 :(得分:0)

您可以在sed命令中使用双引号,然后在其中使用单引号:

sed -i "s/option ssid.*/option ssid 'test'/g" /some/file

答案 1 :(得分:0)

在评论中,您说您的真实代码是:

sed -i 's/option ssid.*/option ssid '"'"'"'$OPTARG'"'"'"'/g'

应该更准确,简洁地写成:

sed -i 's/\(option ssid\).*/\1 '"'$OPTARG'"'/g'

看:

$ echo 'hi option ssid question' | sed 's/\(option ssid\).*/\1 '"'$RANDOM'"'/'
hi option ssid '5203'

给出your feedback to a different answer,听起来您正在运行的sed版本需要在-is/...之间建立备份文件名。否则,shell脚本中较早的某个地方会出现错误,或者$OPTARG包含正斜杠或反向引用。