sed命令在solaris中工作,但不在Linux中

我是新的shell脚本和sed命令。

以下sed命令在Solaris中工作,但在Linux中发生错误:

 sed -n 's/^[a-zA-z0-9][a-zA-z0-9]*[ ][ ]*\([0-9][0-9]*\).*[/]dir1[/]subdir1\).*/\2:\1/p' 

错误是

 sed: -e expression #1, char 79: Invalid range end 

我不知道为什么它给无效范围结束错误。

看起来像Linux Sed不喜欢你的Az (两次)。 无论如何,这并没有什么意义。

使用[AZ] (大写Z)

正如blue122所说, Az作为一个范围是没有意义的。 Solaris sed将其解释为“通过ASCII代码为A的ASCII代码”,在这种情况下,您可能会有意外的匹配。 AZ出现在ASCII之前的az中,但在Za之间有几个字符。

 59 Y 5a Z ---- 5b [ 5c \ 5d ] 5e ^ 5f _ 60 ` ---- 61 a 62 b 

这里是一个显示Solaris sed的示例(在这种情况下是Solaris 8)。 考虑到这个范围,它会替代__以及您显然瞄准的字母。

 % echo "f3oo_Ba\\r" | /usr/bin/sed 's/[Az]/./g';echo .3..... 

(请注意, 3不会被替换,因为它不属于指定的ASCII范围。)

GNU sed保护你免于错误地在脚下射击自己。