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\}$"