在多个条件下使用 sed

Using sed with multiple conditions

我有一个 .spec 文件,其中包含如下行:

Requires: rpm_name           = 1.0.0
Requires: longer_rpm_name    = 1.0.1

我正在整理一个脚本,该脚本将写入 .spec 文件并使用各自的新版本更新 rpm 版本。

使用 sed 我可以做类似 sed -i 's/Requires: rpm_name.*/Requires: rpm_name = 2.0.0' 的事情。这将导致以下结果:

Requires: rpm_name = 2.0.0
Requires: longer_rpm_name    = 1.0.1

我不想替换整行,而是想简单地替换 = 字符后面的版本号,以使该行的格式保持不变。我想要:

Requires: rpm_name          = 2.0.0
Requires: longer_rpm_name   = 1.0.1

我想 sed 找到以 Requires: rpm_name 开头的行,然后只替换版本号而不是整行。这可能吗?

在命令开头使用地址规范来匹配行。然后在 s 命令中使用正则表达式来替换末尾的数字。

sed -i '/^Requires: rpm_name/s/[0-9.]*$/2.0.0/'

记住等号前的部分

sed -ri 's/(Requires: rpm_name.*)=/= 2.0.0/'

使用sed

$ sed 's/\(\<rpm_name \+=\).*/ 2.0.0/' input_file
Requires: rpm_name           = 2.0.0
Requires: longer_rpm_name    = 1.0.1