我的示例字符串如下所示:
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']
>>>
6条答案
按热度按时间rlcwz9us1#
使用
grep -E
怎么样?tvz2xvvm2#
您的
sed
可能不支持模式\d
。请尝试[0-9]
或[[:digit:]]
。若要仅打印实际匹配项(而不是整个匹配行),请使用替换。
4bbkushb3#
试试这个:
但是请注意,如果一行上有两个图案,它将打印第二个。
qni6mghb4#
sed
无法识别\d
,请改用[[:digit:]]
。您还需要转义+
或使用-r
开关(OS X上为-E
)。请注意,
[0-9]
同样适用于阿拉伯-印度数字。cgh8pdjw5#
我们可以使用sed -En来简化正则表达式,其中:
7gcisfzg6#
尝试使用rextract,它允许你使用正则表达式提取文本并重新格式化。
示例: