我尝试在 Solaris 机器和 Linux 机器上使用sed
带有 的线路。+
在 Solaris 上,sed 不会删除字符串,直到我想要的第一个数字:
solaris:/ ROOT > echo "Release............5.3.7.1-12" | sed 's/[^0-9]\+//'
Release............5.3.7.1-12
在 Linux 上我得到了预期的结果:
linux tmp]# echo "Linux Release............5.3.7.1-12" | sed 's/[^0-9]\+//'
5.3.7.1-12
为什么这个 sed 语法在 Solaris 上不起作用?
为了使其能够在 Solaris 上运行,我需要对语法进行哪些更改?
答案1
通常情况下,转义+
字符 ( \+
) 会得到文字+
,而不是修饰符。Ubuntu 10.04 上的情况并非如此sed
,但 Solaris 上可能并非如此。
我最好的猜测是,这是特定于实现的,因此sed 's/[^0-9]\+//'
可能会有效。
您也可以尝试sed -r 's/[^0-9]\+//'
(其中-r
意味着扩展正则表达式)它适用于Ubuntu 10.04。