我需要提取数据库版本以满足脚本要求。
我需要从中获取数据库详细信息oratab
及其版本。
假设我在 oratab 中的条目如下:
dbname1:/oracle/app/oracle/11.2.0.4/db_1:Y
dbname2:/oracle/app/oracle/9.2.0.3/db_1:Y
在这里,我只需要提取特定数据库的数据库版本,例如 11 或 9。这意味着 shell 脚本应该只显示 11 或 9。
答案1
如果您的版本awk
支持正则表达式作为字段分隔符,您可以执行以下操作:
$ awk -F'[/.]' '{print $5}' oratab
11
9
或者,如果您也希望打印数据库名称:
$ awk -F'[:/.]' '{print $1,$6}' oratab
dbname1 11
dbname2 9
我不确定 Solaris 或 AIX 版本是否awk
支持正则表达式作为字段分隔符。 GNUawk
确实如此。 FreeBSD 的版本也是如此。 mawk
也original-awk
这样做。
这应该在 Solaris 上工作awk
(应该在任何 Solaris 上工作awk
):
awk -F'/' '/^#/ {next}; /kmad/ {sub(/\..*/,"",$5);print $5}' /etc/oratab
它会跳过以注释开头的行#
,然后(对于包含 的所有行kmad
)它会删除字段 5 中从第一个.
开始的所有内容,然后打印该字段。
如果您有一些非常奇怪的问题awk
,不理解字段分隔符或next
语句中的正则表达式,请尝试以下操作:
awk -F'/' '! /^#/ && /kmad/ {sub(/\..*/,"",$5);print $5}' /etc/oratab
如果你两者都awk
没有sub()
,那么它就不是awk
,它是渡渡鸟。把它埋起来,得到一个真正的awk
。