我需要regex使grep(posix)只打印(返回true),如果在单行中按空格分隔的每个浮点都是有效的,如:
3.14 12 18.9
如果一个或多个无效浮点出现在空格之间的行中,则不打印任何内容(返回false),例如:
8.12 1.1.1 78
或
1..28 1.09 46
浮点可以尽可能多地出现在单行中,只要有效浮点被空格分隔,它将返回true/print,由grep(posix)返回。
目前,我有grep的regex:
grep -E "^[[:blank:][:digit:]]*.+[[:digit:]]+$" FILE
它适用于如下模式:
1.13 1 1.2.3 1. 1
但我不喜欢1.2.3和1.1这样的模式来匹配,只是我需要的是1.13或1之间的空格。
注意:我只需要单行的工作。
发布于 2021-01-17 02:59:57
您可以使用
grep -E '^[0-9]+(\.[0-9]+)?([[:blank:]][0-9]+(\.[0-9]+)?)*$'
详细信息
^
- string[0-9]+
的开始-一个或多个digits(\.[0-9]+)?
-一个.
和一个或多个digits([[:blank:]][0-9]+(\.[0-9]+)?)*
的可选出现-零或多个[[:blank:]]
出现-一个选项卡或space[0-9]+(\.[0-9]+)?
-一个或多个数字后面跟着一个.
和一个或多个digits的可选出现。
$
-字符串的结尾.https://stackoverflow.com/questions/65758606
复制