追加到文件中一行的末尾

Append to end of a line in a file

所以我有一个 keywords.robot 文件,其开头如下所示:

***SETTINGS***
library   rfgui.py   maximum_allowed_heartbeats_missed=2  DISPLAY=12
library   OperatingSystem
library   others.py

现在文件是 运行 和 Docker,但上面的 DISPLAY 值要更改为 0,例如

***SETTINGS***
library   rfgui.py   maximum_allowed_heartbeats_missed=2  DISPLAY=0
library   OperatingSystem
library   others.py

我可以在 Docker 文件的 运行 部分使用可以更改此设置的 sed/awk 命令吗,所以我的 Docker 文件 运行 部分可能类似于:

RUN ["sh", "sed (...) > keywords.robot", "robot keywords.robot"]

如果您有 -E-i\s/\S shorthand [[:space:]][^[:space:]] 的 GNU sed:

$ sed -Ei 's/(\sDISPLAY=)\S+//' keywords.robot
$ cat keywords.robot
***SETTINGS***
library   rfgui.py   maximum_allowed_heartbeats_missed=2  DISPLAY=0
library   OperatingSystem
library   others.py

第一个解决方案: 使用您显示的示例。使用 awk 您可以尝试以下替换方式。这只处理 1 次出现的 DISPLAY=digits(.digits 在这里可选匹配) 你可以从 sub 更改为 gsub 以在此处进行多次替换。

awk '{sub(/DISPLAY=[0-9]+(\.[0-9]+)?/,"DISPLAY="0)} 1' Input_file

第二个解决方案 与 GNU awk 使用 RS(记录分隔符)选项尝试:

awk -v RS='DISPLAY=[0-9]+(\.[0-9]+)?' '{sub(/=[0-9]+/,"=0",RT);ORS=RT} 1' Input_file

我会按照以下方式使用 GNU AWK 完成此任务,令 file.txt 内容为

***SETTINGS***
library   rfgui.py   maximum_allowed_heartbeats_missed=2  DISPLAY=12
library   OperatingSystem
library   others.py

然后

awk '$NF~/^DISPLAY=/{$NF="DISPLAY=0"}{print}' file.txt

输出

***SETTINGS***
library rfgui.py maximum_allowed_heartbeats_missed=2 DISPLAY=0
library   OperatingSystem
library   others.py

说明:如果最后一列内容 ($NF) 以 (^) DISPLAY= 开头,则将最后一列内容设置为 DISPLAY=0。对于每一行做 print。请注意,按原样将多个空间压缩为单个空间以用于进行修改的行。如果必须有 3 个空格,则将代码更改为 awk 'BEGIN{OFS=" "}$NF~/^DISPLAY=/{$NF="DISPLAY=0"}{print}' file.txt

(在 gawk 4.2.1 中测试)