为了避免两个脚本之间发生冲突,我想更改文件一行中的任何值〜/.ideskrc与零。这是具有所需值的行:
Background.Delay: 0
我现在有一个手动解决方案可以处理该问题:
STRING="Background.Delay: 0"
if ! grep -q "$STRING" $HOME/.ideskrc;
then
yad --geometry 300x300 --text="Rotate Backgrounds and Separate Backgrounds can not be run at the same time. \n
Run Rotate Backgrounds and set that Delay to zero."
exit 0
fi
如果只更改它而不需要用户干预,那就太好了。我使用 sed 尝试了多种变体,但没有成功。最近的例子:
sed -i -r 's/Background.Delay:[[:space:]]+1/Background.Delay: 0/' ~/.ideskrc
我只是一个初级脚本编写者,所以肯定需要一些帮助。谢谢。
最终版本现在带有 yad 格式并为感兴趣的任何人修改了消息:
if ! grep -q "$STRING" $HOME/.ideskrc;
then
sed -i 's/^\([[:blank:]]*Background\.Delay:\).*/\1 0/' "$HOME/.ideskrc"
yad --timeout=3 --no-buttons --geometry 500x100 --text-align=center --text="
<b>Rotate Backgrounds has been disabled to avoid conflict.</b>
"
fi
答案1
:
假设您要删除该行后面的值并0
无条件插入 a ,并且还假设该字符串Background.Delay:
出现在该行的最开头:
sed -i 's/^\([[:blank:]]*Background\.Delay:\).*/\1 0/' "$HOME/.ideskrc"
或者
sed -i '/^[[:blank:]]*Background\.Delay:/ s/:.*/: 0/' "$HOME/.ideskrc"
这会在主目录中的Background.Delay:
文件中的任何行的开头查找文字字符串,前面可能有任意数量的制表符或空格(这些将被保留),删除后面的所有内容并在空格之后插入。.ideskrc
:
0
如果您的sed
实现支持使用-i
上面所示的选项(请参阅如何使用 sed -i (就地编辑)实现可移植性?)。