sed正则表达式无法获得第一场比赛

时间:2015-10-02 21:40:08

标签: regex sed

我放弃......以下

15 Sep 1605.00 (SPX1530U1605-E),0.25,0.0,0.05,0.10,0,87

我想从blob中提取数字1530。 “SPX”可以是大写字母[A-Z]的任何组合并且长度不同(例如,GOOG,FB)。数字后面总是有一个大写字母,例如示例中的“U”。

下面得到第二个数字,1605。我对如何提取1530感到茫然。

echo "15 Sep 1605.00 (SPX1530U1605-E),0.0,0.0,266.10,284.60,0,0" | \
gsed -r 's/.*[A-Z]([0-9].*)[-][A-Z].*/\1/g'

仅对字符串“SPXW1530I1605-E”而不是整行执行操作是可以接受的。

2 个答案:

答案 0 :(得分:2)

通常grep是您只想提取数据时的首选工具。您可以使用GNU grep,它在您传递-P选项时提供perl兼容正则表达式:

grep -oP '\([A-Z]+\K[0-9]+' file

我们正在搜索文字(,后跟一个或多个大写(ASCII)字母。然后我们使用\K来清理匹配缓冲区。 (很好,不是吗?)以下数字是最后一场比赛。

答案 1 :(得分:1)

这应该有效:

s='15 Sep 1605.00 (SPX1530U1605-E),0.25,0.0,0.05,0.10,0,87'
sed -r 's/.*[A-Z]+([0-9]+)[A-Z].*/\1/' <<< "$s"
1530