SED를 사용하여 구성 파일 줄의 주석 처리를 해제하고 Linux 구성 파일의 텍스트 바꾸기

SED를 사용하여 구성 파일 줄의 주석 처리를 해제하고 Linux 구성 파일의 텍스트 바꾸기

내 파일의 특정 매개변수 구성을 자동화하려고 합니다 /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은 수정되지 않은 행을 인쇄하는 데 사용되고 다음 두 명령은 수정된 행을 인쇄하는 데 사용됩니다.

관련 정보