두 번 반복되는 파일 내용을 변경하려고 하며 동일한 파일의 두 번째 내용에 추가 줄을 추가하고 싶습니다.
샘플 파일
User YOURNAME
IdentityFile ~/.ssh/YOURKEY
.
.
.
User YOURNAME
Installing
Installing
스크립트 실행 후 샘플 출력
User adminuser
IdentityFile ~/.ssh/id_rsa
.
.
.
User adminuser
IdentityFile ~/.ssh/id_rsa
Installing
Installing
다음 명령을 변경 user
하고 사용할 수 있습니다YOURKEY
sed
`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 으로 대체됩니다 . 마지막으로 모든 줄을 인쇄합니다.YOURNAME
adminuser
IdentityFile
print
답변2
문제의 일부는 템플릿이 일관성이 없다는 것입니다.가지다한 IdentityFile
줄, 두 번째 줄은아니요. 먼저 기존 IdentityFile
행을 삭제한 다음 필요한 행을 추가하여 일관성을 유지할 수 있습니다 .
행을 삭제하려면 다음을 수행하세요.
sed -i '/^IdentityFile /d' filename
행을 추가하려면 sed
다음을 수행 하십시오.성냥라인 User
및추가예를 들어 한 줄
sed -e '/^User /'a'\
IdentityFile ~/.ssh/id_rsa' filename