我只是一个初级脚本编写者,所以肯定需要一些帮助。谢谢。

我只是一个初级脚本编写者,所以肯定需要一些帮助。谢谢。

为了避免两个脚本之间发生冲突,我想更改文件一行中的任何值〜/.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 (就地编辑)实现可移植性?)。

相关内容