gpt4 book ai didi

linux - 在版本名称和版本号之间进行过滤

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:00 24 4
gpt4 key购买 nike

当我运行脚本 kit_version.sh 时,我得到以下输出

 #  ./kit_version.bash

--- USAW Kits ---
RPM Kits Installed Time
------------------------------------ ---------------------------------
APP-IR-LRPS-1.1.0.0-01 Thu 15 Nov 2012 11:10:20 AM IST
APP-V-LRPS-4.3.7.0-01 Mon 15 Oct 2012 04:27:54 PM IST
batter-ic-4.3.0.0-04 Mon 24 Feb 2014 02:10:21 PM IST
CSHRS-Monitoring-5.0.0.0-03 Mon 24 Feb 2014 03:32:43 PM IST
CS-RH-watchdog-conf-5.0.0.0-03 Mon 24 Feb 2014 03:32:42 PM IST
CSe-OSP-Bin-5.0.0.0-01 Mon 24 Feb 2014 03:28:00 PM IST
sca_core_2.5.7.0-7 Sun 29 Mar 2015 02:36:46 PM IDT
sca_data:80.7.0-7 Sun 29 Mar 2015 02:37:04 PM IDT
.
.
.

如何过滤输出,以便我仅在第一个字段中获取包名称和第二个字段仅版本号如下:

 ./kit_version.bash | ......



APP-IR-LRPS 1.1.0.0-01
APP-V-LRPS 4.3.7.0-01
batter-ic 4.3.0.0-04
CSHRS-Monitoring 5.0.0.0-03
CS-RH-watchdog-conf 5.0.0.0-03
CSe-OSP-Bin 5.0.0.0-01
sca_core 2.5.7.0-7
sca_data 80.7.0-7
  • 备注 – 版本名称和版本号之间的分隔符可以是不同的字符

最佳答案

使用 GNU awk,我可以想象

 ./kit_version.bash | gawk '{ print gensub(/.([0-9.]+-[0-9.]+)$/, "\t\\1", 1, $1) }'

这将用制表符替换与第一个字段末尾的版本号匹配的字符串之前的字符,并打印该替换的结果。要切断前三行,请使用

awk 'NR > 3 { print gensub(/.([0-9.]+-[0-9.]+)$/, "\t\\1", 1, $1) }'

即添加NR > 3条件。

或者使用 sed:

./kit_version.bash | sed '1d;2d;3d;s/[[:space:]].*//;s/.\([0-9.]\+-[0-9.]\+\)$/\t\1/'

即:

1d                              # first three lines: delete
2d
3d
s/[[:space:]].*// # remove everything after the first space,
# i.e., everything except the first field
s/.\([0-9.]\+-[0-9.]\+\)$/\t\1/ # then substitute as before.

这取决于没有以数字结尾的包,同时也用句点与版本号分隔。也就是说,

#            vvvvvvvv-- if this is supposed to be the version
somepackage2.3.4.5-10

将无法正常工作(它将给出somepackag 2.3.4.5-10)。不过,这种格式似乎不太可能被允许。

关于linux - 在版本名称和版本号之间进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28873755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com