我如何提取末尾包含“g__”的行?

我如何提取末尾包含“g__”的行?

我想提取以 结尾的行g__something。在下面的例子中,一些行包含 ,g__something后跟s__something。我不想提取它们。我只想要以 结尾的行g__something

以下是正文

此示例中仅应提取三行,即末尾带有g__Bifidobacteriumg__Aeriscardovia和的行。g__Aeriscardovia

我怎样才能做到这一点?

答案1

使用标准 shell 字母范围在大多数情况下都有效,但LC_COLLATE=C为了安全起见,最好使用。Bash 的范围实现遵循文档,但对于非 C 语言环境可能会产生意外结果。

LC_COLLATE=C
grep g__[a-zA-Z]*$ yourfile

您漏掉了“$”,这是“行尾”符号。如果没有这个 $,字符串当然会匹配行上的任何位置。


由于没有任何内容仍然匹配,因此行尾可能存在一些非打印字符,如空格、制表符、回车符等...从发布的图片中无法判断,因此只需在“$”之前添加行尾的实际内容,或尝试类似操作(对于一个或多个空格):

grep "g__[a-zA-Z]*[ ]*$"

请注意字符串周围添加的引号。添加更多可能的非打印字符留给读者练习(在脚本中添加这些奇数字符更容易),但有字符类可以做到这一点,例如

[^[:print:][:blank:]]

相关内容