GNU SED를 사용하여 줄에 주석을 달고 새 줄을 추가합니다.

GNU SED를 사용하여 줄에 주석을 달고 새 줄을 추가합니다.

SSH 구성을 보호하기 위해 RHEL 7에서 /etc/ssh/sshd_config 파일을 편집한다고 가정해 보겠습니다.

대체하고 싶습니다. Ciphers 줄을 예로 들어 그대로 두고 주석 처리해 보겠습니다. 또한 Red Hat이 rpm을 업데이트하거나 iso를 설치할 때마다 문자열이 깨지는 것을 방지하기 위해 문자열의 가장 작은 부분을 끌 수 있기를 원합니다.

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc

되어야 한다...

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789 etc...

파일 이름이 testfile이고 내용이 This is my test file인 테스트 파일에서 개행 문자를 찾거나 추가하려고 합니다. "아니요, 새 줄이 아닙니다"라고 추가하려고 했지만 처참하게 실패했습니다.

sed -i '/This is my test file./aNo it's not.' testfile

어떻게 해야 하며, 더 중요하게는 그 뒤에 숨은 핵심 개념은 무엇입니까?

답변1

아래 sed 명령을 사용해 보았는데 완벽하게 작동합니다.

주문하다

sed -i '/^Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-c/s/.*/#&\nCiphers abc-123,def-456,ghi-789/g' filename

산출

#Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
Ciphers abc-123,def-456,ghi-789

답변2

sed -i -n 'p; s/^Ciphers/#&/p' /etc/ssh/sshd_config

-i제자리에

-n명시적으로 인쇄되지 않는 한 아무것도 인쇄하지 않음

/p검색 문자열 끝에 강제로 인쇄하여 -n일치하는 문자열을 효과적으로 덮어씁니다.

관련 정보