grep用于仅包含“标准”美国字符的行

时间:2019-09-09 13:55:50

标签: regex grep

我正在尝试找出如何grep查找仅由A-Z和a-z组成的行,即字母的“ American”字母。我希望这能奏效,但不会:

$ echo -e "Jutland\nJastrząb" | grep -x '[A-Za-z]*'
Jutland
Jastrząb

我希望它仅打印“ Jutland”,因为±不是美国字母中的字母。我该如何实现?

2 个答案:

答案 0 :(得分:2)

您需要在LC_ALL=C之前添加grep

printf '%b\n' "Jutland\nJastrząb" | LC_ALL=C grep -x '[A-Za-z]*'

Jutland

您还可以使用-i开关忽略大小写并减少正则表达式:

printf '%b\n' "Jutland\nJastrząb" | LC_ALL=C grep -ix '[a-z]*'

LC_ALL=C避免了依赖于语言环境的影响,否则您当前的LOCALE将ą视为[a-zA-Z]

答案 1 :(得分:1)

您可以使用perl正则表达式:

$ echo -e "Jutland\nJastrząb" | grep -P '^[[:ascii:]]+$'
Jutland

这是实验性的:

-P, --perl-regexp
      Interpret  the  pattern as a Perl-compatible regular expression (PCRE).  This is experimental and
      grep -P may warn of unimplemented features.

编辑

仅对于字母,请使用[A-Za-z]

$ echo -e "L'Egyptienne\nJutland\nJastrząb" | grep -P '^[A-Za-z]+$'
Jutland