答案1
使用标准 shell 字母范围在大多数情况下都有效,但LC_COLLATE=C
为了安全起见,最好使用。Bash 的范围实现遵循文档,但对于非 C 语言环境可能会产生意外结果。
LC_COLLATE=C
grep g__[a-zA-Z]*$ yourfile
您漏掉了“$”,这是“行尾”符号。如果没有这个 $,字符串当然会匹配行上的任何位置。
由于没有任何内容仍然匹配,因此行尾可能存在一些非打印字符,如空格、制表符、回车符等...从发布的图片中无法判断,因此只需在“$”之前添加行尾的实际内容,或尝试类似操作(对于一个或多个空格):
grep "g__[a-zA-Z]*[ ]*$"
请注意字符串周围添加的引号。添加更多可能的非打印字符留给读者练习(在脚本中添加这些奇数字符更容易),但有字符类可以做到这一点,例如
[^[:print:][:blank:]]