grep(POSIX) 单行空白 space 之间的正则表达式浮点

grep(POSIX) regex floating point between blank space in single line

我需要 grep(posix) 的正则表达式来仅打印(return true) 如果单行中由空白 space 分隔的每个浮点都有效,例如:

3.14 12 18.9

并且不打印任何内容(return 错误) 如果一个或多个无效浮点出现在空白 space 之间的那一行,例如:

8.12 1.1.1 78

1..28 1.09 46

浮点数可以尽可能多地出现在单行中,只要是有效的浮点数,用空格分隔 space 它会 return true/print 通过 grep(posix).

目前我有 grep 的正则表达式:

grep -E "^[[:blank:][:digit:]]*.+[[:digit:]]+$" FILE

它适用于以下模式:

1.13 1 1.2.3 1. 1

但我不会像 1.2.3 和 1.1 这样的模式匹配,我只需要在空白 space.

之间输入 1.13 或 1

注意:我只需要单行工作。

您可以使用

grep -E '^[0-9]+(\.[0-9]+)?([[:blank:]][0-9]+(\.[0-9]+)?)*$'

详情:

  • ^ - 字符串开头
  • [0-9]+ - 一位或多位数字
  • (\.[0-9]+)? - 可选择出现 . 和一个或多个数字
  • ([[:blank:]][0-9]+(\.[0-9]+)?)* - 零次或多次出现
    • [[:blank:]] - 制表符或 space
    • [0-9]+(\.[0-9]+)? - 一位或多位数字后跟可选的 . 和一位或多位数字
  • $ - 字符串结尾。