osx中的sed提取模式

时间:2017-10-23 22:03:19

标签: regex macos sed

我有字符串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工作的同时..

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

要获得完整的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(以及BSD sed应该),您可以使用-E标志激活ERE支持(由于转义少而简化表达式和{{1} }运营商支持):

+

答案 1 :(得分:0)

解决方案:

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

答案 2 :(得分:0)

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