빈 구성 섹션 제거

빈 구성 섹션 제거

~/.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 스크립트가 있는 것은 좋지만 구성 파일을 실제로 변경하고 저장하는 것이 아니라 보기 위한 용도로 사용해야 합니다.

관련 정보