Home > Software design >  How to parse version number from a package list and print out package name and version in separate l
How to parse version number from a package list and print out package name and version in separate l

Time:08-25

The package list looks like this:

ncurses-6.2  
netifd-2020-06-06-51e9fb81  
net-snmp-5.9.1  
nettle-3.5.1  
nginx-util-1.4  
odhcpd-full  
openldap-2.4.48  
openssl-1.1.1g    
pciutils-3.7.0  
pcre-8.44  
pcsc-lite-1.8.13  

I want to print out like this

name: ncurses-6.2  
version: 6.2  
name: netifd-2020-06-06-51e9fb81  
version: 2020-06-06-51e9fb81  
name: net-snmp-5.9.1  
version: 5.9.1  
.  
.  
.  

Currently, I use

awk '{ print "- name: "$1"\n version: "}' package_list

to print, but don't know how to print the version number.

CodePudding user response:

You may try this awk:

awk '{
   print "name:", $0
   sub(/^[^-] (-[^0-9][^-]*)*(-|$)/, "")
   print "version:", $0
}' file

name: ncurses-6.2
version: 6.2
name: netifd-2020-06-06-51e9fb81
version: 2020-06-06-51e9fb81
name: net-snmp-5.9.1
version: 5.9.1
name: nettle-3.5.1
version: 3.5.1
name: nginx-util-1.4
version: 1.4
name: odhcpd-full
version:
name: openldap-2.4.48
version: 2.4.48
name: openssl-1.1.1g
version: 1.1.1g
name: pciutils-3.7.0
version: 3.7.0
name: pcre-8.44
version: 8.44
name: pcsc-lite-1.8.13
version: 1.8.13

CodePudding user response:

A sedsolution could be:

sed 'h
     s/[^-]*\(-[^0-9][^-]*\)*//
     s/^-//
     s/^/version: /
     x
     s/^/name: /
     G
' file
  • Related