首页 > 解决方案 > 用另一个文件的字符串替换文件的字符串以进行匹配

问题描述

我有一个文件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

标签: bashawksedgrep

解决方案


-->无论如何,您还没有提供预期的输出,这个 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

推荐阅读