Macos 向文件中添加新行

Macos 向文件中添加新行,macos,awk,sed,Macos,Awk,Sed,我正在尝试使用bash脚本禁用Spotify在macOS上登录时启动的功能。Spotify不使用登录项或启动来启动,因此我必须弄清楚这一点 Spotify有一个名为prefs的文件,位于~/Library/Application Support/Spotify中。我可以通过在文件中的core.clock_delta=0行之后添加行app.autostart mode=“off”手动编辑该文件。我想弄明白的是如何用脚本来实现这一点。我尝试了以下方法: sed '/core.clock_delta=

我正在尝试使用bash脚本禁用Spotify在macOS上登录时启动的功能。Spotify不使用登录项或启动来启动,因此我必须弄清楚这一点

Spotify有一个名为
prefs
的文件,位于
~/Library/Application Support/Spotify
中。我可以通过在文件中的
core.clock_delta=0
行之后添加行
app.autostart mode=“off”
手动编辑该文件。我想弄明白的是如何用脚本来实现这一点。我尝试了以下方法:

sed '/core.clock_delta=0/a app.autostart-mode=\"off\"' prefs
这给了我错误
sed:1:“/core.clock_delta=0/a a…”:命令a预期\后跟文本

awk '1;/core.clock_delta=0/{ print "app.autostart-mode=\"off\""; }' prefs
这将以我期望的方式输出
prefs
文件的文本,但不会向
prefs
文件写入任何内容,考虑到它是
awk
,这是有意义的。我读到的一个建议是在
awk
中添加
-I
,但这不是一个公认的选项。我不能在我需要的地方使用该行,因为该行可以随更新而更改。我也不能用新文件替换整个文件,因为它还包含散列的帐户信息。我还尝试将这一行添加到文件的末尾,但是Spotify会在第一次运行时崩溃,然后替换文件

基本上我要找的就是这个

storage.last-location="~/Library/Application Support/Spotify/PersistentCache/Storage"
core.clock_delta=0
app.last-launched-version="1.1.55.498.gf9a83c60"
app.autostart-configured=true
变成这样

storage.last-location="~/Library/Application Support/Spotify/PersistentCache/Storage"
core.clock_delta=0
app.autostart-mode="off"
app.last-launched-version="1.1.55.498.gf9a83c60"
app.autostart-configured=true

我在这里搜索并尝试了解决方案,但似乎没有一个有效,一些人的建议是“我做了这个…”,但没有解释他们是如何做到的。

对于您展示的示例,请尝试以下内容。只需找到字符串的匹配项,然后打印当前行和要打印的值

awk '/core\.clock_delta=0/{print $0 ORS "app.autostart-mode=\"off\"";next} 1' Input_file
或者可以这样做:

awk '/core\.clock_delta=0/{$0=$0 ORS "app.autostart-mode=\"off\""} 1' Input_file

一旦您对屏幕/终端上打印的结果感到满意,然后将
>temp&mv temp Input_file
附加到上述命令,以将更改保存到Input_file本身。

这可能适用于您:

sed -i'' -e '/core.clock_delta=0/a app.autostart-mode="off"' prefs
-i
选项允许更改覆盖原始文件

macOS可能需要
-e
选项


不需要转义,因为它们在
a
命令中没有任何意义。

这会给我文件的输出,新行在正确的位置,但不会像我的awk示例那样编辑文件。@Kevin,当然,请现在查看我更新的帖子,将
>temp&&mv temp Input_file
附加到上述命令中,以将更改保存到输入_文件本身。是的,这非常有效。非常感谢你。我不知道为什么我没有想过要这样做。