我使用的是 Lubuntu 19.04。我有一个名为
text
的文件,其中包含大写和小写字符的混合。我尝试用 '*'
替换所有这些字符,但收到错误消息。
sed: -e expression #1, char 11: Invalid range end
这是我的代码:
sed 's/[A-z]/*/g' text
我原本期望屏幕上显示星号 (*) 的输出,但我收到此错误消息:
sed: -e expression #1, char 11: Invalid range end
我该如何解决这个问题?
你会得到一个错误,因为你有一个无效的范围
[A-z]
混合了大写/小写
正确的范围应该是
[a-z]
全部小写,或 [A-Z]
全部大写,或 [a-zA-Z]
混合,与 [a-Z]
相同
因此,要将所有字母(上下)替换为
*
,您应该使用:
sed 's/[a-zA-Z]/*/g' text
sed 's/[A-Za-z]/*/g' text
sed 's/[a-Z]/*/g' text
[A-z]
是 C.UTF8
语言环境中的有效范围,但是您的计算机可能使用 en_US.UTF8
,其中排序(或 排序规则)更加复杂(有关更多详细信息,请参阅 Unicode 排序算法)。
以下内容应在大多数发行版上给出预期结果:
echo aaa111 | LC_ALL=C.UTF8 sed 's/[A-z]/*/g'