使用sed查找和替换变量中的特定字符

时间:2017-10-18 03:40:40

标签: regex linux bash sed capturing-group

问题:我有一个带字符的变量我想在存储在变量中的同一个字符串中添加另一个字符

实施例。 “[blahblahblah]”---> “\ [blahblahblah \]”

当前解决方案:目前我通过两个步骤完成我想要的任务,每个步骤攻击一个括号

实施例

temp=[blahblahblah]
firstEscaped=$(echo $temp | sed s#'\['#'\\['#g)
fullyEscaped=$(echo $firstEscaped | sed s#'\]'#'\\]'#g)

这给了我想要的结果,但我觉得我可以使用capturing groups在一行中完成此任务。我没有运气,而且我已经烧坏了。我遇到的大多数例子都涉及想要在括号之间提取文本而不是我想要做的事情。 This是我最近无济于事的尝试。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

可能有更有效的方式,(只有1 s/s/r/有一个更高级的注册表),但是这样做,给出你的样本输入

fully=$(echo "$temp" | sed 's/\([[]\)/\\\1/;s/\([]]\)/\\\1/') ; echo "$fully"

<强>输出

\[blahblahblah\]

请注意,将sed;操作链接在一起是完全正常的,如果在sed脚本文件中,则用空行分隔。

使用sed对了解\(...\)个捕获组,并按编号引用它们,即\1

IHTH

答案 1 :(得分:2)

SELECT 0

简要说明,

  • $ temp=[blahblahblah] $ fully=$(echo "$temp" |sed 's/\[\|\]/\\&/g'); echo "$fully" \[blahblahblah\] :目标是替换'['或']',以及'[',']'和'|'需要逃脱。
  • \[\|\]:字符&用于引用匹配的模式,并且介意它也需要转义。

作为@Gordon Davisson的建议,您也可以使用括号表达式来避免扩展格式正则表达式,

&