在 grep 中过滤 RE

在 grep 中过滤 RE

我的命令是:

grep -E '^  [0..9]'

我有的模式

  24
    -38.54270131
  24
    -38.54085331
  24
    -38.53603119
  24
    -38.53427780
  24
    -38.53396521
  24
    -38.53226876
  24
    -38.53211376

预期输出:

  24
  24
  24
  24
  24
  24
  24

答案1

您没有以任何有意义的方式解释您的过滤条件。以下是一些可以提供所需输出的 ​​RegEx 解决方案:

匹配任何以 2 个空格开头,然后是 2 个数字,最后是 EOL 的行:

grep -E '^ {2}[0-9]{2}$'

匹配任意行才不是行首包含 4 个空格,然后包含-:

grep -vE '^ {4}-'

如果这对您不起作用,请明确说明您的过滤条件。

答案2

大王

awk '/^[[:blank:]]+[[:digit:]]+$/' file

... 将打印^[[:blank:]](空格和制表符)开头的行一次或多次+1,后跟[[:digit:]](包括任何形式的 UNICODE 的数字)一次或多次,+然后是行尾$

1)使用*量词来匹配零个或多个[[:blank:]]......这将允许匹配仅包含以下内容的行[[:digit:]]

示范:

$ cat file
  24
    -38.54270131
  24
    -38.54085331
  24
    -38.53603119
  24
    -38.53427780
  24
    -38.53396521
  24
    -38.53226876
  24
    -38.53211376
$ 
$ 
$ awk '/^[[:blank:]]+[[:digit:]]+$/' file
  24
  24
  24
  24
  24
  24
  24
$

答案3

如果您只想排除带有小数点的负数,那么:

$ grep -v '[.-]' infile.txt 
  24
  24
  24
  24
  24
  24
  24

相关内容