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

Find and Replace Specific characters in a variable with sed

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

例如。 “[blahblahblah]”--->“\[blahblahblah\]”

目前的解决方案:目前我用两步完成我想要的,每一步攻击一个括号

例如

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

这给了我想要的结果,但我觉得我可以使用 capturing groups. I've just had no luck and I'm getting burnt out. Most examples I come across involve wanting to extract the text between brackets instead of what I'm trying to do. This 在一行中完成此操作,这是我最近一次无济于事的尝试。有什么想法吗?

可能有更有效的方法,(只有 1 s/s/r/ 有更高级的正则表达式),但这个有效,给定你的样本输入

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

输出

\[blahblahblah\]

请注意,可以将多个 sed 操作链接在一起,由 ; 分隔,或者如果在 sed 脚本文件中,则由空行分隔。

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

IHTH

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

简要说明,

  • \[\|\]:目标替换为“[”或“]”,以及“[”、“]”和“|”需要转义。
  • &:字符&表示匹配的模式,注意也需要转义。

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

sed 's/[][]/\&/g'