RHEL 8.3环境执行sed命令报Invalid range end错误如何解决
问题原因
RHEL 8.3内置的GNU Sed版本(4.5+)比RHEL 6.10的Sed版本(4.2.1)对POSIX正则括号表达式的语法检查更严格,你当前正则表达式的问题出现在字符范围判断逻辑:
- 括号表达式
[]中如果-没有放在集合的最开头或最末尾,会被Sed识别为ASCII区间符 - 你写的
+=_-./片段中,_的ASCII码(95)大于.的ASCII码(46),_-.构成了一个起点大于终点的无效区间,因此触发Invalid range end报错 - RHEL 6的旧版Sed对这类非法区间的容错性更高,未触发强制报错
解决方法
调整-在括号集合中的位置,放到集合的最末尾,避免被识别为区间符即可,修正后的命令如下:
sed 's/[^][A-Za-z0-9\^`~!@#$%&*|\,:;{}()+=_./ "<>?\/\\-]//g'
如果仍然报错,可在命令前加LC_ALL=C强制使用ASCII字符集排序,规避locale带来的字符排序差异问题:
LC_ALL=C sed 's/[^][A-Za-z0-9\^`~!@#$%&*|\,:;{}()+=_./ "<>?\/\\-]//g'
内容的提问来源于stack exchange,提问作者mma
相关产品推荐
相关产品推荐

