如果我运行以下.sh文件:
#!/bin/sh -a
echo "a" | sed -e 's/[\d001-\d008]//g'
结果是一个错误:
sed:-e表达式#1,字符18:无效的范围结尾
但是,如果我运行以下.sh文件:
#!/bin/sh
set -a
echo "a" | sed -e 's/[\d001-\d008]//g'
它运行没有错误。第二个代码不是应该等同于第一个吗?为什么在第一个错误?
设置
—
Jeff Schaller
LC_COLLATE=C
(或POSIX
)以sed
解决该问题的电话
我发现一个差异:第一个脚本
—
Mark Plotnick
POSIXLY_CORRECT=y
在环境中调用sed(可能是其他实用程序),第二个脚本在环境中没有调用POSIXLY_CORRECT
。我从中调用这两个脚本的外壳POSIXLY_CORRECT
在其环境中没有。
嗯,
—
Isaac
echo "a" | POSIXLY_CORRECT=y sed -e 's/[\d001-\d008]//g'
重现您的问题
确认上述操作完全不符合CentOS 7.x上显示的OP的要求-GNU bash,版本4.2.46(2)-发行版(x86_64-redhat-linux-gnu)和CentOS Linux版本7.5.1804(核心) 。
—
slm
sh
一样。也不是所有sed都是等效的。sh
您正在使用哪个?在哪个操作系统上?和哪个sed(也许?sed --version
如果没有失败)?