Regex 用sed查找并替换变量中的特定字符
问题:我有一个包含字符的变量,我想在存储在变量中的同一字符串中添加另一个字符 例如“[blahblahblah]”-->“\[blahblahblah\]” 当前解决方案:目前我通过两个步骤完成我想要的,每一步攻击一个支架 前Regex 用sed查找并替换变量中的特定字符,regex,linux,bash,sed,capturing-group,Regex,Linux,Bash,Sed,Capturing Group,问题:我有一个包含字符的变量,我想在存储在变量中的同一字符串中添加另一个字符 例如“[blahblahblah]”-->“\[blahblahblah\]” 当前解决方案:目前我通过两个步骤完成我想要的,每一步攻击一个支架 前 这给了我想要的结果,但我觉得我可以用一行代码来完成。我只是运气不好,快累坏了。我遇到的大多数例子都涉及到想要提取括号之间的文本,而不是我试图做的事情。这是我最近的一次尝试。有什么想法吗?可能有更有效的方法(只有1个s/s/r/和一个更喜欢reg ex的人),但这是可行的,
这给了我想要的结果,但我觉得我可以用一行代码来完成。我只是运气不好,快累坏了。我遇到的大多数例子都涉及到想要提取括号之间的文本,而不是我试图做的事情。这是我最近的一次尝试。有什么想法吗?可能有更有效的方法(只有1个
s/s/r/
和一个更喜欢reg ex的人),但这是可行的,只要你提供示例输入
fully=$(echo "$temp" | sed 's/\([[]\)/\\\1/;s/\([]]\)/\\\1/') ; echo "$fully"
输出
\[blahblahblah\]
请注意,可以将多个sed
操作链接在一起,并用分隔代码>或如果在sed
脚本文件中,则使用空行
阅读有关使用\(…\)
对的sed
捕获组,并按编号引用它们,即\1
IHTH可能有更有效的方法(只有1个s/s/r/
和一个fancier reg-ex),但考虑到您的示例输入,这是有效的
fully=$(echo "$temp" | sed 's/\([[]\)/\\\1/;s/\([]]\)/\\\1/') ; echo "$fully"
输出
\[blahblahblah\]
请注意,可以将多个sed
操作链接在一起,并用分隔代码>或如果在sed
脚本文件中,则使用空行
阅读有关使用\(…\)
对的sed
捕获组,并按编号引用它们,即\1
IHTH
简要说明
\[\\\]
:替换“[”或“]”的目标,以及“[”、“]”和“|”的目标需要转义
&
:字符&
表示匹配的模式,请注意它也需要转义
正如@Gordon Davisson的建议,您也可以使用括号表达式来避免扩展格式regex
sed 's/[][]/\\&/g'
简要说明
\[\\\]
:替换“[”或“]”的目标,以及“[”、“]”和“|”的目标需要转义
&
:字符&
表示匹配的模式,请注意它也需要转义
正如@Gordon Davisson的建议,您也可以使用括号表达式来避免扩展格式regex
sed 's/[][]/\\&/g'
您需要双引号$temp
,以防止分词和通配符扩展。请注意,[]
是一个shell通配符,因此它可能会意外扩展。是的,您是对的。这是从OP复制的,将对此进行修改。我还注意到,您使用的正则表达式是扩展格式的(使用|
来分隔替代项)。除非您使用sed-r
(GNU-sed)或sed-E
(BSD-sed),否则这通常不起作用。使用括号表达式可能更好(尽管包含括号的括号表达式…很棘手)sed的/[]]/\\&/g'
应该可以工作。这一点很好@Gordon Davidson我想把你的建议作为补充添加到我的答案中。我在我的时髦环境中尝试了s/[][]/\\&/g
,但没有成功。这就是为什么我只通过了2次,但很高兴知道[]]
可以工作。祝大家好运。您需要双引号$temp
,以防止分词和通配符扩展。请注意,[]
是一个shell通配符,因此它可能会意外扩展。是的,您是对的。这是从OP复制的,将对此进行修改。我还注意到,您使用的正则表达式是扩展格式的(使用|
来分隔替代项)。除非您使用sed-r
(GNU-sed)或sed-E
(BSD-sed),否则这通常不起作用。使用括号表达式可能更好(尽管包含括号的括号表达式…很棘手)sed的/[]]/\\&/g'
应该可以工作。这一点很好@Gordon Davidson我想把你的建议作为补充添加到我的答案中。我在我的时髦环境中尝试了s/[][]/\\&/g
,但没有成功。这就是为什么我只通过了2次,但很高兴知道[]]
可以工作。祝大家好运。