rpm 업그레이드를 위한 속성 파일(sed/awk/comm/diff) 병합을 위한 쉘 스크립트

rpm 업그레이드를 위한 속성 파일(sed/awk/comm/diff) 병합을 위한 쉘 스크립트

rpm을 통해 설치되는 Java 제품을 개발 중입니다. 사용자가 편집할 수 있는 구성 파일 세트가 있습니다. 이러한 구성 파일은 다음 형식의 Java 속성 파일입니다.

com.acme.pkg1.setting=something customized 1
com.acme.pkg2.setting=something original 2

이러한 파일은 SPEC 파일에 %config(noreplace)로 표시되어 있으므로 업그레이드 후 옆에 .rpmnew 파일을 가질 수 있습니다.

com.acme.pkg1.setting=something original 1
com.acme.pkg2.setting=something original 2
com.acme.pkg3.setting=something original 3

원본 파일에 새 키만 추가하는 방식으로 이러한 파일을 병합하는 방법이 있습니까?

내 의견은 다음과 같습니다.

  1. 필터 키
  2. 키 정렬
  3. comm(1)을 사용합니다. 예: comm -23 file.rpmnew.keys file.keys > new.keys
  4. file.rpmnew에서 new.keys와 일치하는 키=값 추출
  5. 원본 파일에 결과 추가

rpm 업데이트 후 스크립트를 통해 이를 어떻게 달성할 수 있습니까?

표준 Linux 유틸리티(comm, diff, sed, awk, grep...)를 사용하는 것이 더 낫습니까?

답변1

  • 설정 없이 원시 원시 및 원시 목표 값을 구성합니다.

    sed "s/=.*//g" file_original.ini > file_original.raw
    sed "s/=.*//g" file_target.ini > file_target.raw
    
  • 제 생각에는 대상이 원래 대상보다 더 많은 옵션을 갖게 될 것이라고 생각합니다. 차이를 만드세요:

    grep -vf original.raw target.raw > newvals.dat
    
  • 새로운 가치를 추가하세요:

    cp -p file_original.ini file_original.ini.rpmsave
    grep -f newvals.dat file_target.ini >>file_original.ini
    

이것이 기본 아이디어입니다. 많은 오류 처리, 깨끗한 임시 파일 생성 및 정리가 필요합니다.

관련 정보