Unixquest945
Unixquest945

Reputation: 123

Replace string of a file with a string of another file for matches

I have a file comp.pkglist which mention package version and release. The two fields 'version change' and 'release change' each contain two versions in the format '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

For every package name I need to search in /tmp directory and replace its version from old version to new version and old release to new release:

$ 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.

How can I make it work for all packages in the comp.pkglist file to replace its old version to new version and old release to new release in any file under the directory /tmp.

Upvotes: 0

Views: 60

Answers (1)

Kubator
Kubator

Reputation: 1383

You haven't provided expected output anyway this sed will place with new version on all --> lines:

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

Test:

$ 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

Upvotes: 1

Related Questions