空の構成セクションの削除

空の構成セクションの削除

~/.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 1行ではなく、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スクリプトがあることをお勧めしますが、設定ファイルを実際に変更して保存するのではなく、表示の目的で使用する必要があります。

関連情報