/etc/ntp.conf
내 구성의 자동 업데이트를 사용하고 싶다고 가정해 보겠습니다 sed
. ntp.conf
정의된 형식 허용목록파일 전체에 나타나는 줄에 동일한 키워드를 사용합니다. 예를 들어:
# first block occurrences
server 1.1.1.1
server 2.2.2.2
driftfile /var/lib/ntp/drift
# second block of occurrences
server 3.3.3.3
server 4.4.4.4
ntp
이제 5.5.5.5, 6.6.6.6 및 7.7.7.7과 같은 서버 목록을 업데이트했습니다 . 내가 원하는 결과는 다음과 같습니다.
# first block occurrences
server 5.5.5.5
server 6.6.6.6
server 7.7.7.7
driftfile /var/lib/ntp/drift
# second block of occurrences
이것을 위해 사용할 수 있습니까 sed
? 이 문제에 적합한 도구입니까, 아니면 다른 도구를 사용해야 합니까?
추신: 두 번째 블록(또는 두 블록 모두)의 발생을 주석 처리하는 것도 옵션일 수 있습니다.
답변1
list.txt
다음과 같은 파일에 새 서버 목록이 있는 경우 cwd
:
sed '/^server/{x;//!r list.txt
d}' /etc/ntp.conf
또는 파일을 사용하지 않고 새 서버 이름을 하드코딩하려는 경우:
sed '/^server/{x;//!c\
server 1\
........\
server n-1\
server n
d}' /etc/ntp.conf
이는 다음과 같이 가정합니다.주석 처리되지 않은 항목이 하나 이상 있습니다. server
철사귀하의 것에서 /etc/ntp.conf
(또한 주석 처리된 줄은 제거되지 않습니다 server
. 해당 줄도 포함하도록 정규식을 변경할 수 있습니다). 원본 파일에 서버 항목이 없더라도 이 줄을 삽입하려면(이 경우 새 서버가 파일 끝에 추가됨) 다음을 수행할 수 있습니다.
sed '/^server/{x;//!r list.txt
d}
${x;//!r list.txt
x}' /etc/ntp.conf
또는 원하는 경우 동일한 조건을 사용하십시오 c\
. 연습용으로 남겨두겠습니다. 모든 백슬래시가 있는 줄을 변경할 때 포함된 줄 바꿈은 백슬래시로 이스케이프되어야 한다는 점을 명심하세요 c\
(예제에서처럼).
답변2
sed '
/^server/ d
/first block/a\
server 5.5.5.5\
server 6.6.6.6\
server 7.7.7.7
' /etc/ntp.conf
첫 번째 항목만 변경합니다.
# first block occurrences
server 5.5.5.5
server 6.6.6.6
server 7.7.7.7
driftfile /var/lib/ntp/drift
# second block of occurrences