"awk" 命令在 SuSE 11 和 Solaris 10 上的行为不同
"awk" Command Behaves Differently On SuSE 11 vs. Solaris 10
朋友,
我正在尝试提取 ksh 脚本中以下路径的最后一部分:
TOOL_HOME=/export/fapps/mytool/mytool-V2-3-4
我想从上面提取版本 #(即 2-3-4)。
awk 在 SuSE 上运行良好:
echo $TOOL_HOME | awk -F'mytool-V' '{print }'
#2-3-4
但是,在 Solaris 10 上,它会产生以下内容:
#ytool
所以在 Solaris 上,awk 会忽略 -F'mytool-V' 中第一个字符之后的所有内容
我应该怎么做才能在两个 OS 上获得相同的输出?
无需使用 awk
或任何其他外部程序。 ksh
可以做到:
echo ${TOOL_HOME##*mytool-V}
Solaris awk
坏了...
$ echo "$TOOL_HOME" | awk '{sub(/.*mytool-V/,"")}1'
2-3-4
或简单地使用 sed
$ echo "$TOOL_HOME" | sed 's/.*mytool-V//'
2-3-4
在 Solaris 上使用 /usr/xpg4/bin/awk,而不是 /bin/awk(又名 "old, broken awk")。
朋友,
我正在尝试提取 ksh 脚本中以下路径的最后一部分:
TOOL_HOME=/export/fapps/mytool/mytool-V2-3-4
我想从上面提取版本 #(即 2-3-4)。
awk 在 SuSE 上运行良好:
echo $TOOL_HOME | awk -F'mytool-V' '{print }'
#2-3-4
但是,在 Solaris 10 上,它会产生以下内容:
#ytool
所以在 Solaris 上,awk 会忽略 -F'mytool-V' 中第一个字符之后的所有内容
我应该怎么做才能在两个 OS 上获得相同的输出?
无需使用 awk
或任何其他外部程序。 ksh
可以做到:
echo ${TOOL_HOME##*mytool-V}
Solaris awk
坏了...
$ echo "$TOOL_HOME" | awk '{sub(/.*mytool-V/,"")}1'
2-3-4
或简单地使用 sed
$ echo "$TOOL_HOME" | sed 's/.*mytool-V//'
2-3-4
在 Solaris 上使用 /usr/xpg4/bin/awk,而不是 /bin/awk(又名 "old, broken awk")。