如何提取CentOS主版本号7?现有Awk管道命令无法生效
解决CentOS版本主版本号提取问题
咱们先搞清楚你原来的命令为啥失效:
原输出内容:
CentOS Linux release 7.5.1708
这个字符串按空格分隔后,版本号7.5.1708是第4个字段($4),但你原来的命令取了第7个字段($7),自然得不到任何结果。
下面是几个经过验证的可行方案:
方案1:修正原awk命令(最简版)
直接调整字段位置,用单条awk完成处理:
awk -F'[ .]' '{print $4}' /etc/redhat-release
原理:通过-F'[ .]'把空格和小数点同时设为分隔符,这样主版本号7就成了第4个字段,直接输出即可。
也可以用拆分字段的写法,逻辑更直观:
awk '{split($4, ver_arr, "."); print ver_arr[1]}' /etc/redhat-release
方案2:用sed正则提取
利用正则匹配版本号的位置,精准提取主版本号:
sed -E 's/.* ([0-9]+)\..*/\1/' /etc/redhat-release
原理:匹配任意字符直到「空格+数字段+小数点」的位置,然后把整个字符串替换为匹配到的数字段,也就是我们要的主版本号。
方案3:用grep精准匹配
借助Perl正则的\K忽略前缀,直接提取目标内容:
grep -oP 'release \K[0-9]+' /etc/redhat-release
原理:-o参数让grep只输出匹配到的部分,\K会忽略前面的release 字符串,只捕获后面的数字段,也就是主版本号。
以上所有命令执行后,都会输出你需要的7。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

