我有一个文件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
下的任何文件中将旧版本替换为新版本。
答案 0 :(得分:1)
无论如何,您仍未提供预期的输出,此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