使用 awk 或 sed 仅提取不带版本的软件包名称

使用 awk 或 sed 仅提取不带版本的软件包名称
cat pkg.temp
ca-certificates-2017.2.14-65.0.1.el6_9.noarch
glusterfs-3.7.9-12.el6.x86_64
glusterfs-api-3.7.9-12.el6.x86_64
glusterfs-api-devel-3.7.9-12.el6.x86_64
glusterfs-client-xlators-3.7.9-12.el6.x86_64

这是一个文件,我希望输出如下:

PkgName                        Version
ca-certificates                2017.2.14-65.0.1.el6_9.noarch
glusterfs                      3.7.9-12.el6.x86_64
glusterfs-api-devel            3.7.9-12.el6.x86_64
glusterfs-client-xlators       3.7.9-12.el6.x86_64

这样,我最后就会得到不需要的连字符:

$ awk -F'[[:digit:]]' '{ print $1}'
ca-certificates-
glusterfs-
glusterfs-api-
glusterfs-api-devel-
glusterfs-client-xlators-

打印 $2 时也不会显示我的版本

awk -F'[[:digit:]]' '{ print $2}' /tmp/Version-pkgs

.
.
.
.
.
.

答案1

如果您确信分隔符组合是“-”后跟一个数字,则可以使用 sed 将破折号替换为空格。您可以通过 awk 将其管道化以进行一些格式化打印。如下所示:

sed -e 's/-\([0-9]\)/ \1/' _file_ | awk 'BEGIN {printf("%-30s %s\n", "PkgName", "Version")} {printf("%-30s %s\n", $1, $2)}'

希望这可以帮助。

相关内容