sed命令在solaris中工作,但在Linux中不工作
问题描述:
我是shell脚本和sed
命令的新手。sed命令在solaris中工作,但在Linux中不工作
以下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不喜欢你的A-z
(两次)。无论如何,这并没有什么意义。
使用[A-Z]
(大写Z)
+0
谢谢..它正在处理大写字母Z.看起来solaris的解释与Linux不同 – Hello
答
正如blue112说,A-z
为一个范围是没有意义的。 Solaris sed将其解释为“通过z
的ASCII代码为A
的ASCII码”,在这种情况下,您可能会发生意外的匹配。 A-Z
出现在ASCII码a-z
之前,但有几个字符落在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/[A-z]/./g';echo
.3.....
(注意3
不会被替换,因为它不属于指定的ASCII范围。)
GNU sed的是保护你从错误搬起石头砸自己的脚。
字符范围'A-z'包含**所有**字符,其中ASCII值介于'A'和'z'之间。这包括上下级的alpha,以及'''''''',''''''','^','_'和反引号。这可能不是故意的,是吗? –
@拉马先生是的,这不是故意的。它现在正在工作,一旦我改变Az到AZ – Hello
'[a-zA-z0-9]'相当于'[[:alnum:]]'(是的,带有双括号) –