如果单行中由空格分隔的每个浮点都有效,我需要 grep(posix) 的正则表达式来打印(返回 true),例如:
3.14 12 18.9
并且不打印任何内容(返回 false) 如果一个或多个无效浮点出现在空白之间的该行中,例如:
8.12 1.1.1 78
或
1..28 1.09 46
浮点可以在单行中尽可能多地出现,只要是由空格分隔的有效浮点,它就会通过 grep(posix) 返回 true/print。
目前我有 grep 的正则表达式:
grep -E "^[[:blank:][:digit:]]*.+[[:digit:]]+$" FILE
它适用于如下模式:
1.13 1 1.2.3 1. 1
但我不会像 1.2.3 和 1.1 这样的模式来匹配,只是我需要在空格之间是 1.13 或 1。
注意:我只需要单行工作。
最佳答案
你可以使用
grep -E '^[0-9]+(\.[0-9]+)?([[:blank:]][0-9]+(\.[0-9]+)?)*$'
详细信息:
^
- 字符串开头[0-9]+
- 一位或多位数字(\.[0-9]+)?
- 可选出现.
和一个或多个数字([[:blank:]][0-9]+(\.[0-9]+)?)*
- 零次或多次出现[[:blank:]]
- 制表符或空格[0-9]+(\.[0-9]+)?
- 一个或多个数字,后跟可选的.
和一个或多个数字更多数字
$
- 字符串结尾。
关于regex - grep(POSIX) 单行空格之间的正则表达式浮点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65758606/