我放弃......以下
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”而不是整行执行操作是可以接受的。
答案 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