我有字符串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选项。