使用通配符 [0-9] 的 grep 命令

使用通配符 [0-9] 的 grep 命令
grep ".0000000" data > output

我提取了数据文本文件中以 .0000000 结尾的所有数字数据。当我使用通配符更改此代码时,如下所示:

grep ".[0-9][0-9][0-9][0-9][0-9][0-9][0-9]" data > output

上述代码应该提取所有以点后七位数字结尾的数字数据,但它并没有按预期工作。我该如何修改上述代码以提取所有以点后七位数字结尾的数字数据?

答案1

从您的描述中无法清楚看出您的表达式是无法匹配您想要的东西,还是无法匹配您不想要的东西。

如果是后者,那么可能是因为.grep 中的正则表达式匹配任何单个字符(换行符除外 - 但 grep 通常都是基于行的)。要匹配文字点(句点),您需要对其进行转义\.或将其放置在字符集中,就像您对十进制数字范围所做的那样:

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"

您还提到表达式应该匹配“以...结尾”的数据 - 目前还不清楚您的意思是行结束符词边界- 这些分别是$\b(或\>)ex。

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$"

grep "[.][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\b"

您还可以使用量词来缩短表达式 - 切换到扩展正则表达式(ERE)模式1

grep -E "[.][0-9]{7}$"

1在 GNU grep 中,您可以通过转义括号在基本正则表达式 (BRE) 模式下使用量词grep "[.][0-9]\{7\}$"

相关内容