【问题标题】:How can i use a variable inside sed cmd when Variable again has special character?当变量再次具有特殊字符时,如何在 sed 命令中使用变量?
【发布时间】:2016-10-25 13:49:36
【问题描述】:

# test-1,没关系,它会删除给定 'cshrc' 文件中的给定行

sed -i '\:alias reml rm -rf ${ENIP_HOME}/log/*:d' cshrc

# test-2,这不会删除给定“cshrc”文件中的行

LINE="alias reml rm -rf ${ENIP_HOME}/log/*"
sed -i '\:$LINE:d' cshrc 

sed cmd 上方不会从 'cshrc; 中删除该行;文件,我如何在 test-2 中执行行删除?

【问题讨论】:

  • 无论如何都不安全。 /.../ 是正则表达式。如果你的线路有.*,你的命令会让你大吃一惊。

标签: linux shell sed sh


【解决方案1】:

在变量扩展方面,单引号 (') 和双引号 (") 是有区别的。在您的设置中,只需将LINE= 定义中的双引号替换为单引号就足够了,这样${ENIP_HOME} 就会被延续而不被替换(如果未定义变量,则由空字符串替换)。

您还需要在sed 行中使用双引号,以便将$LINE 替换为变量的定义。

【讨论】:

  • 在 sed 中使用 (')LINE=(") 解决了这个问题。谢谢
  • 很好,那么请随时接受我的回答(投票箭头旁边应该有一个绿色的复选标记)。
猜你喜欢
  • 2020-11-19
  • 2022-01-08
  • 2012-06-24
  • 2014-07-29
  • 2013-10-09
相关资源
最近更新 更多