我正在尝试找出如何grep
查找仅由A-Z和a-z组成的行,即字母的“ American”字母。我希望这能奏效,但不会:
$ echo -e "Jutland\nJastrząb" | grep -x '[A-Za-z]*'
Jutland
Jastrząb
我希望它仅打印“ Jutland”,因为±不是美国字母中的字母。我该如何实现?
答案 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