sed:范围结束无效

问题描述 投票:0回答:2

我使用的是 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

我该如何解决这个问题?

linux sed
2个回答
2
投票

你会得到一个错误,因为你有一个无效的范围

[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

0
投票

[A-z]
C.UTF8
语言环境中的有效范围,但是您的计算机可能使用
en_US.UTF8
,其中排序(或 排序规则)更加复杂(有关更多详细信息,请参阅 Unicode 排序算法)。

以下内容应在大多数发行版上给出预期结果:

echo aaa111 | LC_ALL=C.UTF8 sed 's/[A-z]/*/g'

© www.soinside.com 2019 - 2024. All rights reserved.