Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用变量时,sed不能正确替换字符串_String_Bash_Variables_Replace_Sed - Fatal编程技术网

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

String 使用变量时,sed不能正确替换字符串,string,bash,variables,replace,sed,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 "

目前,我有一个文件,它有一个唯一的模式行

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中使用-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

为什么要使用
-e
选项
-e
,如果我没记错的话,应该只在您执行类似操作时使用:
sed's/a/b/'-e'/b/d'
。另外,尝试使用
[a-Z0-9]
而不是
[:alnum:]
。我想知道为什么bubthegreat使用
| less
,而不仅仅是
管理…|sed's/…'
?:-)
-e
不会受伤,但不需要。祝大家好运。删掉了那些没有被实际使用的-e是因为在我搜索sed的字符串替换方法时建议使用它,但根据建议删除了它。谢谢大家!谢谢-less在任何时候都没有被使用,我忘记了在更多的故障排除之后编辑它。支架工作起来很有魅力,谢谢!