2013-12-05 3 views
1

I I가에 운영하고있어 다음과 같은 텍스트가 :나오지도 - 대체 여러 줄 (텍스트의 전체 블록)

... other stuff here.. 

options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no); 
      owner("root"); group("log"); perm(0640); stats_freq(0); 
      bad_hostname("^gconfd$"); 
}; 

... other stuff here.. 

내가 만드는 새로운 라인으로 log_fifo_size(30000);을 추가하기 위해 sed를 사용할 필요가 내 내가 그것을 사용하는 방법을 정규 표현식 작업만큼 충분히 자신이없는 이해

... other stuff here.. 

options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no); 
      owner("root"); group("log"); perm(0640); stats_freq(0); 
      bad_hostname("^gconfd$"); 
      log_fifo_size(30000); 
}; 

... other stuff here.. 

: 같은 텍스트보기. 구문에 대한 설명이나 도움이 필요합니다.

나는 다음 시도했다 :

$sed -e 's/options.*/TEST/g' syslog.conf 
$sed -e '/options.*/ {N; s//TEST/g}' syslog.conf 

둘 다 나를 사랑 받고 있지만, 충분히 닫을 수 없습니다.

sed -e '/options.*/ {N;N; s//options {/g}' syslog.conf 

이것은 내가 가장 가까이있는 것입니다. 그러나 이후로 행 사이의 숫자는 options {} 사이에 약간 까다 롭습니다.

나는 가이드가 무수히 많았지 만, 문서 작성을 통해 항상 힘든 시간을 보냈습니다. 나는 따라야 할 좋은 예를 좋아한다. 그래서 나는 내가 기초를 배우고 나중에 정규 표현식/sed의 기초를 배우는 데 사용할 수있는 예제를 만들 수있는 도움을 얻을 수 있는지 묻는다. 귀하의 예제에서

답변

2
sed '/options {/,/};/ { 
    s/};/log_fifo_size(30000);\ 
&/ 
    }' YourFile 

이 그렇지 않은 log_fifo_size(30000);\n};

}; 변화 라인 };까지 options {로 시작하는 섹션을 사용할 수 있습니다 로그를 섹션의 나머지 부분과 정렬하십시오. 그러나 더 많은 코드를 사용하여 수행 할 수 있습니다.

이 그 부분을 가정은 (GNU가 나오지도)이 당신을 위해 작동 할 수

+0

'sed -e '/ options {/, /};/log_fifo_size (30000) \ ; \ n & /} 'YourFile' 예제를 약간 수정하면됩니다. – Torxed

+0

맞아, 그냥 잊지 마라. \ n gnu sed에서 사용할 수 있지만 다른 모든 sed는 없다. (광산 aix와 sun과 같다) – NeronLeVelu

4

, 한 줄을 삽입하는, 당신은 i

sed '/};/i\   log_fifo_size(30000);' 
+0

내 설정과 관련하여 매우 명확해야합니다. syslog.conf에는 options {} 절 전후에 훨씬 더 많은 내용이 포함되어 있으므로 더 큰 파일에서는 작동하지 않습니다. 그러나 이것은 일괄 적으로 변경할 필요가있는 다른 설정 파일들에서도 작동 할 것입니다. 감사합니다! – Torxed

+0

그냥 섹션의 차를 가져 가라. (주어진 텍스트 샘플은 괜찮지 만 더 큰 내용의 일부분은 분명히) – NeronLeVelu

1

}; 및 섹션 내용 없음 }; 아칸소와 가까운 :이 파일의 options 부분에서 작동

sed '/^options/,/^};/{/};/{x;s/\S.*/log_fifo_size(30000);/;x;H;g};h}' file 

. 각 행을 보류 공간에 복사하고 마지막 행을 감싸는 경우 이전 행의 사본에있는 앞쪽 공백을 제외한 모든 공백을 필요한 문자열로 바꿉니다. 마지막 줄을 추가하고 두 줄을 함께 인쇄합니다.

관련 문제