Shawn Tang
Shawn Tang

Reputation: 35

How to parse version number from a package list and print out package name and version in separate lines?

The packages are in the same folder and are able to list by " ls -al | cut -c 47-" and show as below

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  
name: nettle-3.5.1
version: 3.5.1
name: nginx-util-1.4
version 1.4
.
.
.

Currenly I use this in a shell script

ls -al | cut -c 47- > package_list
awk '{ print "- name: "$1"\n version: "}' package_list

Please advise how to improve the shellscript, thanks

Upvotes: 1

Views: 90

Answers (2)

M. Nejat Aydin
M. Nejat Aydin

Reputation: 10123

A sedsolution could be:

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

Upvotes: 0

anubhava
anubhava

Reputation: 785068

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

Upvotes: 3

Related Questions