извлечение версии и pkgname - PullRequest
0 голосов
/ 11 июня 2018

В bash-скрипте есть следующие переменные.

xyz-0.3.2-3
abc-xyz-tools-0.1-1
def-yz-7.3.0-1.0.0

Результат должен быть для:

pkg: xyz and version of xyz : 0.3.2-3
pkg: abc-xyz-tools version of abc-xzy-tools: 0.1-1
pkg: def-yz version of def-yz: 7.3.0-1.0.0

Поскольку имена pkg имеют разную длину слова, а версии - разныедлины, это немного сложно.

Ваша помощь будет оценена.(bash, sed, awk предпочтительнее lang)

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

с sed

$ sed -E 's/([a-z-]+)-([^-]+-[^-]+$)/package: \1\tversion: \2/' file |
  column -ts$'\t'

package: xyz            version: 0.3.2-3
package: abc-xyz-tools  version: 0.1-1
package: def-yz         version: 7.3.0-1.0.0

вторая группа захвата предназначена для захвата двух последних жетонов вокруг дефиса.Первая группа захвата - это альфа и дефис до предпоследней.

0 голосов
/ 11 июня 2018

РЕДАКТИРОВАТЬ : с кодом имени пакета.

awk --re-interval '
match($0,/([a-zA-Z]+\-+){1,}/){
  val=substr($0,RSTART,RLENGTH-1);
  print "pkg: " val " and version of " val " : " substr($0,RSTART+RLENGTH)
}'  Input_file

Не могли бы вы попробовать awk и сообщить мне, поможет ли это вам. (Удалить--re-interval, если у вас есть более новая версия awk с вами).

awk --re-interval 'match($0,/([a-zA-Z]+\-+){1,}/){print substr($0,RSTART+RLENGTH)}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...