bash - 用另一个文件的字符串替换文件的字符串以进行匹配
问题描述
我有一个文件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
。
解决方案
-->
无论如何,您还没有提供预期的输出,这个 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
推荐阅读
- javascript - 为什么 html 选择元素未定义?
- python - 为什么我的代码会输出错误的 webelements 值?
- amazon-web-services - 使用 Pycharm 在 EMR 上调试 Pyspark
- mysql - 如何在 conda 中使用 mysql?
- javascript - 用护照注册后,我无法设置 Authorization Bearer 标头
- python - Pygame colliderect 无法正常工作
- javascript - React Leaflet:有没有办法制作一个添加标记并使用该标记位置更新状态的 onClick 方法?(初学者反应)
- python - python 无法正确遍历列表
- javascript - 如何在不丢失 Express 令牌的情况下重定向用户
- angular - 将 Angular 部署到 Heroku 时缺少:'NgxWebstorageModule@5.0.0