sed:逸出的方括号不匹配

卢克

目标:替换![alttext](url.png)<img src="url.png" alt="alttext">

!(...)部分做工精细,这是[...]我不能去工作的一部分。

作为一个简单的示例,我想匹配input a [test] b这是我使用的命令:

echo 'a [test] b' | sed 's/\[[^\]]*\]/x/'

它不起作用。当我将方括号替换为尖括号时,它可以正常工作:

echo 'a <test> b' | sed 's/<[^>]*>/x/'

为什么sed不能理解相同的正则表达式,但带有转义的方括号?它在Python等其他工具中也能正常工作。

Finswimmer

在字符类定义内]直接紧接在^所以不要逃避这个。另外,您缺少诸如的量词+,说“一个或多个字符”或*说“零个或多个字符”。此外sed,您的命令行中太多。

$ echo 'a [test] b' | sed 's/\[[^]]\+\]/x/'
a x b

\+是GNU扩展(现在也受其他一些实现支持),标准等效项是\{1,\}

或更可读:

$ echo 'a [test] b' | sed -E 's:\[[^]]+\]:x:'
a x b

-E是BSD扩展,现在也由GNUsed和其他一些实现支持;-r在GNU的较早版本中使用sed)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章