使用变量时,sed不会正确替换字符串

时间:2014-04-07 21:20:40

标签: string bash variables replace sed

目前我的文件具有带

模式的唯一行
alphanumeric_ChangeMe_moreAlphaNumeric

实际看起来像这样:

127.0.0.1 local.com localhost HostType_test_HostNumber2

我试图用另一个命令确定的变量替换字符串测试,使用以下代码作为另一个用户运行。

site=$(su admin -c get_local_site | less | sed 's/Local Site Name: //')
sed -i -e "s/RecoverPoint_[[:alnum:]]*_RPA/RecoverPoint_$site_RPA/" fakehostfile

我测试了各个代码,并且它们回显了正确的值,但是当我尝试在第二个中使用$ site变量时,它无法替换该部分。

我似乎无法找到正确的语法来替换下划线之间的字符串(仅包含字母数字)存储在变量

我已经在这里寻找,并发现了一些类似的问题,但是解决方案似乎不起作用,因为替换字符串的一部分是一个变量。我试图将字符串连接为三个单独的变量,但它取代了奇怪的东西(可能是由于下划线?)

我在这里缺少什么?

有类似问题但无效的问题:

sed variable replacement does not seem to work Sed replacement not working when using variables

1 个答案:

答案 0 :(得分:1)

正如其他人所建议的那样,不需要less命令,如果只需要显示Local Site Name行,请在Sed中使用-n选项。

其次,括号内的不同,应该可以解决您的问题。

site=$(su admin -c get_local_site | sed -n 's/Local Site Name: //p')
sed -i "s/RecoverPoint_[[:alnum:]]*_RPA/RecoverPoint_${site}_RPA/" fakehostfile