目标:替换
为<img src="url.png" alt="alttext">
.
!
和(...)
部分工作正常,这[...]
是我无法工作的部分。
作为一个简单的例子,我想匹配输入a [test] b
。这是我使用的命令:
echo 'a [test] b' | sed 's/\[[^\]]*\]/x/'
它不起作用。当我用尖括号替换方括号时,它工作得很好:
echo 'a <test> b' | sed 's/<[^>]*>/x/'
为什么 sed 不理解相同的正则表达式但带有转义的方括号?它在 Python 等其他工具中运行良好。
在字符类定义
]
中直接跟在^
. 所以不要逃避这一点。此外,您还缺少一个量词,例如+
,说“一个或多个字符”或*
说“零个或多个字符”。此外,您的命令行中有一个sed
太多了。(
\+
作为 GNU 扩展(现在也被其他一些实现支持),标准等价物是\{1,\}
)或更具可读性:
(
-E
作为 BSD 扩展,现在 GNUsed
和其他一些实现也支持;-r
在旧版本的 GNU 中使用sed
)。