Заменить строку файла строкой другого файла для совпадений - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть файл comp.pkglist, в котором упоминается версия и выпуск пакета.Каждое из двух полей 'version change' и 'release change' содержит две версии в формате 'old' --> 'new'.

Version Change: <old version> --> <new version>
Release Change: <old version> --> <new version>
$ cat comp.pkglist
Package list:   nss-util-devel-3.28.4-1.el6_9.x86_64
Version Change: 3.28.4 --> 3.36.0
Release Change: 1.el6_9 --> 1.el6

Package list:   tzdata-2018e-3.el6.noarch
Version Change: 2018e --> 2018g
Release Change: 3.el6 --> 1.el6

. Для каждого имени пакета необходимо выполнить поиск в каталоге /tmp и заменить его версию.от старой версии к новой версии и от старого выпуска к новому выпуску:

$ grep -ri -n tzdata /tmp/.
/tmp/core.pkglist:578:package tzdata                  2018e       3.el6    arch noarch

$ sed -i '578s/2018e/2018g/' /tmp/core.pkglist   # To replace '2018e by 2018g in 578th line.

Как я могу заставить его работать для всех пакетов в файле comp.pkglist, чтобы заменить его старую версию новой версией и старый выпуск новойвыпустить в любой файл в каталоге /tmp.

1 Ответ

0 голосов
/ 28 ноября 2018

В любом случае вы не предоставили ожидаемый результат, который этот sed будет помещать с новой версией на все строки -->:

sed -i 's/[^ ]\{1,\} --> \(.\{1,\}\)$/\1/'

Тест:

$ cat comp.pkglist
Package list:   nss-util-devel-3.28.4-1.el6_9.x86_64
Version Change: 3.28.4 --> 3.36.0
Release Change: 1.el6_9 --> 1.el6

Package list:   tzdata-2018e-3.el6.noarch
Version Change: 2018e --> 2018g
Release Change: 3.el6 --> 1.el6

$ sed 's/[^ ]\{1,\} --> \(.\{1,\}\)$/\1/' comp.pkglist
Package list:   nss-util-devel-3.28.4-1.el6_9.x86_64
Version Change: 3.36.0
Release Change: 1.el6

Package list:   tzdata-2018e-3.el6.noarch
Version Change: 2018g
Release Change: 1.el6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...