我是新的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
中,但在Z
和a
之间有几个字符。
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保护你免于错误地在脚下射击自己。