![SED를 사용하여 구성 파일 줄의 주석 처리를 해제하고 Linux 구성 파일의 텍스트를 바꿉니다.](https://linux55.com/image/154742/SED%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B5%AC%EC%84%B1%20%ED%8C%8C%EC%9D%BC%20%EC%A4%84%EC%9D%98%20%EC%A3%BC%EC%84%9D%20%EC%B2%98%EB%A6%AC%EB%A5%BC%20%ED%95%B4%EC%A0%9C%ED%95%98%EA%B3%A0%20Linux%20%EA%B5%AC%EC%84%B1%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
구성 파일의 특정 매개변수를 자동화하려고 합니다 /etc/ssh/sshd_config
. 특히
#PermitRootLogin yes
그리고
#LoginGraceTime 2m
읽어야 할 내용:
PermitRootLogin no
LoginGraceTime 60
저는 스크립팅 전문가가 아니므로 양해해 주시기 바랍니다.
스크롤을 시작하려고 했지만 sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
이상한 결과가 나왔습니다. 단지 내가 처리하려는 파일이 표시될 뿐입니다...
누군가 sed를 직접 사용하라고 말해 줄 수 있나요?
답변1
출력을 임시 파일로 리디렉션한 다음 임시 파일의 이름을 원본 파일로 바꿉니다.
sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config
또는 GNU가 있는 경우 내부 편집 옵션을 sed
사용할 수 있습니다.-i
sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config
답변2
@Bodo의 답변과 유사하지만 이 솔루션은 원래 줄을 변경하지 않고 수정된 버전을 원래 줄 아래에 추가합니다. 이는 원래 줄을 주석으로 유지하려는 경우에만 의미가 있습니다.
sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config
\(...\)
여기서는 대체 항목으로 대체되는 캡처링 그룹을 사용합니다 \1
(같은 문자열을 다시 입력하기에는 너무 게으르기 때문입니다).
옵션이 있는 sed는 -n
명시적으로 인쇄된 행만 출력하므로 첫 번째 p
명령은 수정되지 않은 행을 인쇄하고 다음 두 명령은 수정된 행을 인쇄합니다.