[英]sed command is working in solaris but not in 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)
正如blue112所说, Az
作为一个范围毫无意义。 sed的。Solaris是解释这是“为ASCII码A
通过为ASCII码z
”,在这种情况下,你可能会产生意想不到的结果。 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/[A-z]/./g';echo
.3.....
(请注意, 3
未被替换,因为它不属于指定的ASCII范围。)
GNU sed可以防止你误入射自己的脚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.