✍️ 田冬冬 • 📅 2024-09-09

# -e 选项

GMT命令在读入数据时默认会处理读入的所有数据记录。-e 选项的作用是筛选或 排除匹配某个字符串或者正则表达式的数据记录。

-e 选项的用法有两种：

- 匹配某个字符串： -e[~]"pattern"

- 匹配某个正则表达式： -e[~]/regexp/[i]

在匹配字符串或正则表达式前加上 ~ 表示反向操作，即排除匹配字符串或 正则表达式的数据记录。 如果数据记录中本身就包括字符 ~，则需要使用 ~ 对其进行转义。 对于匹配正则表达式而言，还可以加上 i 表示忽略大小写。

如果需要指定多个可能的匹配字符串或表达式，则可以加上 +f file。 其中 file 中每行列出一个匹配字符串或表达式。 如果某个匹配字符串以 +f 开头，则会被GMT当作是 -e 的子选项， 因而需要使用 +f 以实现转义。

以一个常见的应用场景举例。假如文件 input.dat 中有一堆数据点，每个数据都对应 某个分类，文件内容如下:

    1 1 type1
    2 2 type1
    3 3 type1
    4 4 type2
    5 5 type2
    6 6 type2
    7 7 type3
    8 8 type10
    9 9 type10
    10 10 null

可以使用 -e 选项筛选出自己需要的数据记录。

筛选出所有匹配 type 的记录:

    $ gmt select input.dat -e"type"
    1   1       type1
    2   2       type1
    3   3       type1
    4   4       type2
    5   5       type2
    6   6       type2
    7   7       type3
    8   8       type10
    9   9       type10

排除所有匹配 null 的记录:

    $ gmt select input.dat -e~"null"
    1   1       type1
    2   2       type1
    3   3       type1
    4   4       type2
    5   5       type2
    6   6       type2
    7   7       type3
    8   8       type10
    9   9       type10

筛选所有匹配 type2 的记录:

    $ gmt select input.dat -e"type2"
    4   4       type2
    5   5       type2
    6   6       type2

筛选所有匹配 type1 的记录:

    # 错误写法，因为 type1 也包含在字符串 type10 中
    $ gmt select input.dat -e"type1"
    1   1       type1
    2   2       type1
    3   3       type1
    8   8       type10
    9   9       type10

    # 正确写法
    # 此处使用了正则表达式，符号 $ 表示行末匹配
    $ gmt select input.dat -e/type1$/
    1   1       type1
    2   2       type1
    3   3       type1

正则表达式的具体用法不在本手册的范围之内，用户请自行搜索“正则表示式”。