【发布时间】:2017-06-11 20:04:50
【问题描述】:
朋友们,
我正在尝试在 ksh 脚本中提取以下路径的最后一部分:
TOOL_HOME=/export/fapps/mytool/mytool-V2-3-4
我想从上面提取版本号(即 2-3-4)。
awk 在 SuSE 上运行良好:
echo $TOOL_HOME | awk -F'mytool-V' '{print $2}'
#2-3-4
但是,在 Solaris 10 上,它会生成以下内容:
#ytool
所以在 Solaris 上,awk 会忽略 -F'mytool-V' 中第一个字符之后的所有内容
我应该怎么做才能在两个操作系统上获得相同的输出?
【问题讨论】:
-
输出中的
#符号来自哪里?它在输入中不存在,您也没有在print语句中添加它,那么为什么它存在于您的输出中?您在 Solaris 上执行哪个 awk - /bin/awk 或 /bin/nawk 或 /usr/xpg4/bin/awk? (提示 - 您应该使用列表中的最后一个,因为第一个是旧的、损坏的 awk,而第二个只是 POSIX 之前的版本)。 -
我刚刚添加了 # 以表明这是我的输出,我实际上并没有在屏幕上看到它。关于哪个awk,让我检查并返回
-
不要添加不存在的东西。这就像把你的车带到修理工那里诊断你的车是否向左拉,并在你把它展示给他询问他认为可能是什么问题之前刺破你的左前轮胎。
-
对于
sed恕我直言来说,这似乎是一个足够简单的工作。 -
返回@EdMorton 的评论并确保您使用的是更高版本的awk。旧的、损坏的 awk 只使用一个字符作为字段分隔符(在您的情况下为
m)并忽略您所看到的其余部分。
标签: awk ksh behavior suse solaris-10