附加到文件中行的末尾

2024-10-02 06:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我有一个keywords.robot文件,它的开头如下所示:

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

现在,该文件将与Docker一起运行,但上面显示的值将更改为0,例如

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

我是否可以在Dockerfile的运行部分使用sed/awk命令来改变这一点,因此我的Dockerfile运行部分可能类似于:

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

Tags: 文件pydockerfilesettingsdisplaylibraryrobotallowed
3条回答

第一种解决方案:与您展示的样品。使用awk可以尝试以下替代方法。这只处理DISPLAY=digits的一次出现(此处可选匹配数字)。对于此处的多次出现,您可以从sub更改为gsub

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

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

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

如果您对-E-i使用GNU,对[[:space:]][^[:space:]]使用\s/\S速记:

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

我将按照下面的方式使用GNUAWK来完成这个任务,让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中测试)

相关问题 更多 >

    热门问题