检查文件中每行的结尾是否以字母结尾,后跟 8 位数字

检查文件中每行的结尾是否以字母结尾,后跟 8 位数字

我在检查文件的每一行是否以字母结尾时遇到了问题,(A-Z (always capital))后面跟着 8 位数字(无论哪个数字都行)。因此,我有许多文件,每个文件的内容如下所示:

Nc1nc2cc3OCCOc3cc2s1 A10000001          
CCN(CC)C1CCN(Cc2cc(I)cc(I)c2O)CC1 B100000002
CCN(CC)C1CCN(Cc2cc(cc(I)c2O)C#CCO)CC1 C10000003

此“字符串”和带有数字的字母之间总是有一个空格。因此,在此示例中,B100000002字母后面有 9 位数字。由于我手动完成了大部分工作,因此我想检查我的文件中是否存在错误。有人能帮我使用一些 bash 命令,以便我查看哪些行具有不同的、不正确的模式吗?

谢谢!

答案1

您可以使用grep来获取不符合规则的行:

grep -v ' [[:upper:]][0-9]\{8\}$' file*
  • 空间与自身相匹配
  • [[:upper:]]匹配任意大写字母
  • [0-9]匹配数字
  • \{8\}是一个“量词”,这意味着前面的构造必须重复 8 次
  • $匹配行末
  • -v显示的行是不是匹配

答案2

你可以用 perl 正则表达式来 grep:

grep -P ' [a-zA-Z]{1}[0-9]{8}$'

-P: 用于 perl 正则表达式

:正则表达式以空格开头,因为你需要在大写字母前有一个空格

[a-zA-Z]{1}:恰好 1 个字母字符,小写或大写(可以删除 az 而只保留大写,即 [AZ]{1})

[0-9]{8}:恰好 8 个数字字符

$: 行结束

如果要显示与模式不匹配的行,只需-v向 grep 命令添加选项。

如果要显示行号,请添加-n选项。

grep -Pvn ' [a-zA-Z]{1}[0-9]{8}$'

相关内容