Bash 将一个文件的字符串替换为另一个文件的字符串以进行匹配
我有一个文件Bash 将一个文件的字符串替换为另一个文件的字符串以进行匹配,bash,awk,sed,grep,Bash,Awk,Sed,Grep,我有一个文件comp.pkglist,其中提到了软件包版本和发行版。两个字段'version change'和'release change'分别包含两个版本,格式为'old'-->'new' Version Change: <old version> --> <new version> Release Change: <old version> --> <new version> 对于每个包名,我需要在/tmp目录中搜索,并将其版本
comp.pkglist
,其中提到了软件包版本和发行版。两个字段'version change'
和'release change'
分别包含两个版本,格式为'old'-->'new'
Version Change: <old version> --> <new version>
Release Change: <old version> --> <new version>
对于每个包名,我需要在/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
下任何文件中的旧版本替换为新版本,并将旧版本替换为新版本 您还没有提供预期的输出,此sed将在所有-->
行上放置新版本:
sed -i 's/[^ ]\{1,\} --> \(.\{1,\}\)$/\1/'
测试:
一般来说,希望你自己解决问题,但在路上寻求帮助。您似乎指定了一个问题并要求实现。请描述为解决此问题所做的工作以及您的困难所在。package tzdata 2018e 3.el6 arch noarch在/tmp目录中搜索“tzdata”时,我在文件/tmp/core.pkglist中找到了上述条目,现在我想要的是:package tzdata 2018g 1.el6 arch noarch。它应该从源文件ie.comp.pkglist中获取2018g和1.el6值,并在文件/tmp/core.pkglistNice中编辑。对于那些讨厌倾斜牙签综合症的人,你可以使用
-E
扩展语法,并将其简化为sed-iE的/[^]{1,}-->(.{1,})$/\1/'
甚至sed-iE的/[^]+-->(.+)$/\1/'
。
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