我在 Solaris 机器和 Linux 机器上运行以下 sed 语法
在 Linux 机器上,sed 执行该作业,删除所有字符直到第一个数字。
但是为什么这个 sed 语法在 Solaris 上不起作用?
为了在 Solaris 上运行它,我需要对 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
答案1
Solaris 通常默认不提供任何 GNU 版本。这意味着您提供的选项和参数通常必须不同,才能使实用程序(如)获得相同的行为sed
。
有时,完全不可能获得相同的行为,例如,sed -i
除非您拥有安装了 GNU 版本的sed
。
从记忆中,sed
Solaris 支持“基本”正则表达式集并且这不包括+
修饰符。您可以+
像这样模拟:
sed 's/[^0-9][^0-9]*//'
或者你也可以*
在这种情况下使用:
sed 's/[^0-9]*//'
Solaris 通常也安装了这些实用程序的 BSD 版本/usr/ucb
。它们通常非常相似,但偶尔会有重要区别,例如ps
。