패턴을 일치시킨 후 다음 줄을 편집하고 존재하지 않는 경우 해당 줄을 추가하는 방법

패턴을 일치시킨 후 다음 줄을 편집하고 존재하지 않는 경우 해당 줄을 추가하는 방법

두 번 반복되는 파일 내용을 변경하려고 하며 동일한 파일의 두 번째 내용에 추가 줄을 추가하고 싶습니다.

샘플 파일

User YOURNAME
IdentityFile ~/.ssh/YOURKEY

.
.
.
User YOURNAME
Installing
Installing

스크립트 실행 후 샘플 출력

User adminuser
IdentityFile ~/.ssh/id_rsa

.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing

다음 명령을 변경 user하고 사용할 수 있습니다YOURKEYsed

`sed- i s/"YOURNAME/adminuser"/g /root/.ssh/config`
`sed -i 's/YOURKEY/id_rsa/g' ff1`

IdentityFile ~/.ssh/id_rsa하지만 다음 행을 삽입할 수 없습니다 .

편집됨

추가 정보는 ****User adminuser줄 시작 부분에 공백이 있다는 것입니다. 이러한 파일은 매일 동기화되므로 IdentityFile행을 삭제할 수 없습니다. 동기화 후 대체됩니다.

최종 편집은 필요에 따라 이루어졌습니다.

perl -i -ne 'next if /IdentityFile/; 
            s#YOURNAME#adminuser\n    IdentityFile ~/.ssh/id_rsa#; 
            print' filename

답변1

모든 사례를 제거 IdentityFile하고 명시적으로 다시 추가하세요.

$ perl -i -ne 'next if /IdentityFile/; 
            s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#; 
            print' file
$ cat file
User adminuser
IdentityFile ~/.ssh/id_rsa

.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing

next if /IdentityFile/일치하는 줄을 건너뜁니다 IdentityFile. s#YOURNAME#adminuser\nIdentityFile ~/.ssh/id_rsa#모든 인스턴스는 , newline 및 line 으로 대체됩니다 . 마지막으로 모든 줄을 인쇄합니다.YOURNAMEadminuserIdentityFileprint

답변2

문제의 일부는 템플릿이 일관성이 없다는 것입니다.가지다IdentityFile줄, 두 번째 줄은아니요. 먼저 기존 IdentityFile행을 삭제한 다음 필요한 행을 추가하여 일관성을 유지할 수 있습니다 .

행을 삭제하려면 다음을 수행하세요.

sed -i '/^IdentityFile /d' filename

행을 추가하려면 sed다음을 수행 하십시오.성냥라인 User추가예를 들어 한 줄

sed -e '/^User /'a'\
IdentityFile ~/.ssh/id_rsa' filename

관련 정보