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