Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用sed查找并替换变量中的特定字符_Regex_Linux_Bash_Sed_Capturing Group - Fatal编程技术网

Regex 用sed查找并替换变量中的特定字符

Regex 用sed查找并替换变量中的特定字符,regex,linux,bash,sed,capturing-group,Regex,Linux,Bash,Sed,Capturing Group,问题:我有一个包含字符的变量,我想在存储在变量中的同一字符串中添加另一个字符 例如“[blahblahblah]”-->“\[blahblahblah\]” 当前解决方案:目前我通过两个步骤完成我想要的,每一步攻击一个支架 前 这给了我想要的结果,但我觉得我可以用一行代码来完成。我只是运气不好,快累坏了。我遇到的大多数例子都涉及到想要提取括号之间的文本,而不是我试图做的事情。这是我最近的一次尝试。有什么想法吗?可能有更有效的方法(只有1个s/s/r/和一个更喜欢reg ex的人),但这是可行的,

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

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

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


这给了我想要的结果,但我觉得我可以用一行代码来完成。我只是运气不好,快累坏了。我遇到的大多数例子都涉及到想要提取括号之间的文本,而不是我试图做的事情。这是我最近的一次尝试。有什么想法吗?

可能有更有效的方法(只有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次,但很高兴知道
[]]
可以工作。祝大家好运。