在多个条件下使用 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
我有一个 .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