【问题标题】:sed does not replace the string correctly when using a variablesed 在使用变量时无法正确替换字符串
【发布时间】:2014-05-20 08:10:52
【问题描述】:

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

alphanumeric_ChangeMe_moreAlphaNumeric

实际是这样的:

127.0.0.1 local.com localhost HostType_test_HostNumber2

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

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

【问题讨论】:

  • 您为什么使用-e 选项? -e,如果我是正确的,应该只在你做这样的事情时使用:sed 's/a/b/' -e '/b/d'。另外,请尝试使用[a-Z0-9] 而不是[[:alnum:]]
  • 我想知道为什么 bubthegreat 使用| less,而不仅仅是admin ... | sed 's/...'? :-) 。 -e 没有伤害,但不需要。祝大家好运。
  • 删除了实际未使用的内容 - -e 是因为在我搜索 sed 的字符串替换方法时建议使用它,但根据建议将其删除。谢谢大家!

标签: string bash variables replace sed


【解决方案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

【讨论】:

  • 谢谢 - less 实际上在任何时候都没有被使用,在更多故障排除后我忘了编辑它。括号就像一个魅力,谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-08-13
  • 2021-09-28
  • 1970-01-01
  • 2015-04-18
  • 2021-07-04
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
相关资源
最近更新 更多