此问题已在此处有答案:
Regular expression to stop at first match(9个回答)
5天前关闭。
我有这段文字
/dev/disk0s2 3.6Ti 2.9Ti 796Gi 79% 383906083 104366287 79% /
/dev/disk0s3 1.2Ti 1.3Ti 796Gi 79% 383906083 104366287 79% /
使用(参见https://regex101.com/r/44YqQe/1)
(\/dev\/disk0s2).* (\d*\.\d+)?Ti
预期结果:3.6
实际结果:2.9
提问
如何匹配并在第一个匹配时停止?
1条答案
按热度按时间dwthyt8l1#
根据您的情况,您可以使用以下解决方案之一。
如果预期磁盘和大小之间只有空格:
(\/dev\/disk0s2)\s*(\d*\.\d+)?Ti
.如果可以预期任何符号,并且您正在使用支持类似PCRE的正则表达式的工具:
(\/dev\/disk0s2).*? (\d*\.\d+)?Ti
,利用lazy matching匹配Ti
之前的第一个数字。如果使用bash工具(如
sed
),您可能需要像(\/dev\/disk0s2).* (\d*\.\d+)?Ti (\d*\.\d+)?Ti
这样的工具。