【问题标题】:sed: Invalid range endsed:无效的范围结束
【发布时间】:2019-08-11 13:24:31
【问题描述】:

我正在使用 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

我该如何解决这个问题?

【问题讨论】:

  • 我无法重现您的错误。您使用的是什么版本的 sed?另外,当您尝试sed 's/[A-Z]/*/g' text 时会发生什么?
  • @Beta 如何查看 sed 的版本? sed 's/[A-Z]/*/g' text 将所有大写字符替换为 *
  • 非 sed 替代 fwiw:tr 'A-Za-z' '[**]' < text

标签: linux sed


【解决方案1】:

你得到一个错误,因为你有一个无效的范围 [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] 不是无效范围,它包含所有大小写字符和 [、\、]、^、_、`。
  • @oguzismail: sed (GNU sed) 4.2.2: sed: -e expression #1, char 11: Invalid range end
  • @oguzismail Gnu sed 4.2.2 和 4.4 (ubuntu 18.04) 肯定会失败
  • @oguzismail 仍然是sed: -e expression #1, char 11: Invalid range end 所以我看不出有任何理由在这个范围内使用sed
  • @oguzismail 来自 gnu sed 手册 gnu.org/software/sed/manual/sed.html 它显示 ‘[a-zA-Z0-9]’,所以我永远不会在可能在某些系统上失败的代码中使用一些,所以请注意安全,远离 [A-z] .或者你可以使用[:alpha:]
猜你喜欢
  • 1970-01-01
  • 2013-05-14
  • 2016-09-08
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多