2014-12-29 2 views
-2

Linux (Fedora 20)에 표준 텍스트 구성 파일이 있습니다. 대부분의 줄은 항상 적용해야하지만 파일이있는 컴퓨터에 따라 몇 줄을 "켜야"(주석 처리되지 않은) 상태로 "꺼야"합니다. 그래서 파일은 다음과 같습니다 : 내가하고 싶은 무엇파일의 줄을 주석 처리/주석 처리를 제거하는 Bash 스크립트

; configuration file 
parameter1 = a 
parameter2 = b 
optparameter1 = z  ; only applies to %%machine-1%% 
; optparameter1 = x ; only applies to %%machine-2%% 
parameter3 = c 
; optparameter2 = x ; only applies to %%machine-2%% 
optparameter2 = f  ; only applies to %%machine-1%% 

명령 줄 매개 변수를 기반으로 라인의 주석 변경 파일을 변경 (또는 파일을 복사) 할 스크립트를 실행합니다. 예 :

./scriptname -u machine-2 -c machine-1 configurationFileName.conf 

이 %% 기계 1 %%로, 모든 선 (전술의 최종 의견을 떠나는 물론) %% 기계 2 마지막 코멘트에 %%가 주석 처리 될 모든 라인을 일으킬 것 끝 주석에 댓글을 달았습니다.

어떻게해야합니까? 고맙습니다.

+2

아무 것도 시도하지 않으셨습니까? 당신이 쏜 문제는 뭐니? 'sed'를 사용해 보셨나요? –

+0

나는 sed가 대답일지도 모른다라고 생각했다. 그러나 나는 그것이 일하게하는 방법을 이해할 수 없었다. 나는 과거에 sed를 사용했을 때 꽤 기초적이었습니다. 구문을 제안 해 주시겠습니까? – SchroedingersCat

답변

3

다음 스크립트를 사용하면 특정 줄을 "켜고"끌 수 있습니다. 귀하의 경우, 그것은 기계 -2기계 -1을 포함하는 라인을 "켜십시오"모든 라인을 "해제"합니다.() 변수 $ 일치를 포함하는 라인에 선 경우

./scriptname machine-2 machine-1 configurationFileName.conf 

가 첫 번째 나오지 명령은 세미콜론을 추가

comm=$1 
uncomm=$2 
filename=$3 
sed -i -e "/$comm/s/^;*/;/" $filename 
sed -i -e "/$uncomm/s/^;//" $filename 

당신은 다음과 같이 실행 다음과 같이 스크립트입니다 이미 주석 처리되었으므로 그대로 남겨 둡니다. 두 번째 줄은 세미콜론을 줄 시작 부분에서 제거합니다.

+1

이 파일은 해시'#'이 아닌 주석 마커로 세미콜론';'을 사용합니다. –

+0

그 점에 대해 감사드립니다. – Bolboa

+0

완벽한. 정확히 내가 무엇을 찾고 있었는지. 감사. – SchroedingersCat

2
  • 는 기계 1에 대한 설정을 사용 (및 machine2의에 대한 설정을 비활성화) : 수

    $ sed -i -e 's/^;* *\(.*machine-2.*\)/\1/p' \ 
         -e 's/^\(.*machine-1.*\)/;\1/p' configurationFileName.conf 
    

:

$ sed -i -e 's/^;* *\(.*machine-1.*\)/\1/p' \ 
     -e 's/^\(.*machine-2.*\)/;\1/p' configurationFileName.conf 
  • 가 (기계 1 및 비활성화 설정) machine2의에 대한 설정을 사용 '-i'sed 옵션이 "configurationFileName.conf"파일을 직접 수정하므로주의하십시오.

  • 관련 문제