sed在osx中提取模式



我有字符串string[3],我想用sed在OSX上提取3

这些输出什么都没有:

echo "string[3]" | sed -n 's/string[(d+)]/1/p'
echo "string[3]" | sed -n 's/string[(d+)].*/1/p'

与https://regex101.com/r/l9gN1v/1作品

谢谢你的帮助!

为了实现POSIX BRE的完全兼容性,您必须使用[0-9][[:digit:]]来表示数字(因为d是PCRE扩展,在任何sed上都不支持)和{1,}开放间隔,而不是+:

$ echo "string[3]" | sed -n 's/string[([0-9]{1,})]/1/p'
3

如果您的sed支持POSIX ERE(BSDsed应该支持),您可以使用-E标志激活ERE支持(由于较少的转义和+运算符支持,简化了表达式):

$ echo "string[3]" | sed -nE 's/string[([0-9]+)]/1/p'
3

解决方案:

echo "string[3]" | sed -n 's/string[([0-9]+)]/1/p'

\d(来自增强的E?RE)似乎在sed中不可用,至少在osx上不可用。如果你尝试echo'd'|sed's/\d/a/g',你会得到'a',这是一个提示。此外,+是一个ERE运算符,因此需要sed的-E选项。

最新更新