~/.config/vlc/vlcrc
如果您只想对配置选项进行版本控制,则此类文件99% 都是垃圾。我有一个脚本删除注释,但留下了大量空配置部分。我的sed
- 和awk
-fu 没有跟上速度,那么如何删除空的配置部分?
配置节的第一行匹配^\[.*\]$
,并且它是空的如果第一行后跟任意数量的仅由空格组成的行,则后跟另一行匹配^\[.*\]$
或EOF
。
答案1
当您看到节标题时,请回想一下它们,但在看到该节中的设置行之前不要打印它们。您可以在 sed 中通过将节头存储在保留空间中来完成此操作,但在 awk 中更清晰。
awk '
/^ *\[/ {section=$0} # recall latest section header
/^ *[^[#]/ { # setting line
if (section != "") {print section; section="";} # print section header if not yet done
print
}
' ~/.vlc/vlcrc >~/config/vlc/vlcrc
答案2
作为 awk 单行代码的替代方案,您可以将 awk 脚本存储到文件中。这是该脚本的稍微复杂的版本:
#!/usr/bin/awk -f
# No section seen yet.
BEGIN { section="" }
# Match and save current section header.
/^\[.*\]$/ {
section=$0;
next;
}
# Ignore blank and comment-only lines.
/^[[:space:]]*(#.*)?$/ {
next;
}
# By default do this.
{
# Print section header if not already printed.
#if(length(section)) {
if(section != "") {
print section;
section="";
}
# And print current line.
print;
}
只需将其保存到像 conf-filter.awk 这样的文件中,并使用 chmod +x conf-filter.awk 将其标记为可执行即可。
答案3
我意识到默认配置文件看起来很混乱,但是当您需要更改某些配置值时,将所有标题和注释放在适当的位置会很有帮助。从长期管理的角度来看,通常建议将这些文件保留其原始形式。这还允许您在升级时跟踪更改...程序的每个新版本都会更改默认配置,如果您对自己的配置进行了尽可能少的更改,您将能够使用以下工具轻松进行比较diff
或vim -d
查看发生了什么变化。
有一个像你写的那样的 awk 脚本很好,可以快速浏览正在设置的值,但它应该用于查看,而不是实际更改和保存配置文件。