删除空配置部分

删除空配置部分

~/.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

我意识到默认配置文件看起来很混乱,但是当您需要更改某些配置值时,将所有标题和注释放在适当的位置会很有帮助。从长期管理的角度来看,通常建议将这些文件保留其原始形式。这还允许您在升级时跟踪更改...程序的每个新版本都会更改默认配置,如果您对自己的配置进行了尽可能少的更改,您将能够使用以下工具轻松进行比较diffvim -d查看发生了什么变化。

有一个像你写的那样的 awk 脚本很好,可以快速浏览正在设置的值,但它应该用于查看,而不是实际更改和保存配置文件。

相关内容