我的示例字符串如下:
This is 02G05 a test string 20-Jul-2012
现在,我想从上面的字符串中提取02G05
。为此,我使用sed尝试了以下正则表达式
$ echo "This is 02G05 a test string 20-Jul-2012" | sed -n '/\d+G\d+/p'
但是上面的命令不打印任何内容,我认为原因是它不能根据我提供给sed的模式匹配任何内容。
所以,我的问题是我在这里做错了什么,以及如何纠正它。
当我用python尝试上面的字符串和模式时,我得到了我的结果
>>> re.findall(r'\d+G\d+',st)
['02G05']
>>>
发布于 2012-07-20 04:39:57
您的sed
可能不支持模式\d
。请尝试使用[0-9]
或[[:digit:]]
。
要只打印实际的匹配项(而不是整个匹配行),请使用替换。
sed -n 's/.*\([0-9][0-9]*G[0-9][0-9]*\).*/\1/p'
发布于 2012-07-20 04:42:44
使用grep -E
怎么样?
echo "This is 02G05 a test string 20-Jul-2012" | grep -Eo '[0-9]+G[0-9]+'
发布于 2012-07-20 04:37:53
sed
无法识别\d
,请改用[[:digit:]]
。您还需要转义+
或使用-r
开关( OS X上的-E
)。
请注意,[0-9]
同样适用于阿拉伯-印度数字。
https://stackoverflow.com/questions/11568859
复制相似问题