~/.ssh/config에 콘텐츠 블록이 있습니다. "# BEGIN AUTO GENERATED CONTENT" 줄로 시작하고 "# END AUTO GENERATED CONTENT" 줄로 끝납니다.
이 두 줄 사이의 내용을 바꾸는 명령이 있습니다. 내용은 "config"라는 파일에서 읽혀집니다.
sed -i -ne '/# BEGIN AUTO GENERATED CONTENT/ {p; r config' -e ':a; n; /# END AUTO GENERATED CONTENT/ {p; b}; ba}; p' ~/.ssh/config
우분투에서는 잘 작동하지만 bsd sed를 사용하는 Mac에서는 작동하지 않습니다. 다음과 같은 오류 메시지가 나타납니다.
sed: 1: "/# BEGIN AUTO GENERATED ...": unexpected EOF (pending }'s)
bsd에서 작동하려면 이 명령을 수정해야 합니다. 맥에서는 gsed를 사용하지 마세요
답변1
첫째, Mac을 사용하고 있으므로 개별 -i
옵션이 작동하지 않습니다. 귀하의 경우 null인 경우 값을 제공해야 합니다.
둘째, 스위치가 이미 적용되어 있으므로 상황에 따라 p;b
쌍을 변경할 수 있습니다. 이전 버전에서는 분기 명령이 닫는 중괄호와 잘 작동하지 않습니다.p;d
-n
b
seds
$ sed -i '' -ne '/# BEGIN AUTO GENERATED CONTENT/{' -e 'p;r config' -e ':a;n' -e '/# END AUTO GENERATED CONTENT/{' -e 'p;d' -e '}' -e 'ba' -e '}' -e 'p' ~/.ssh/config
이것이 사용하고 버리는 것이 아니라면 파일에 다시 작성하고 다음과 같이 호출하는 것이 좋습니다.
$ sed -i '' -nf ./code ~/.ssh/config
$ cat ./code
/# BEGIN AUTO GENERATED CONTENT/{
p
r config
:loop
n
/# END AUTO GENERATED CONTENT/{
p
d
}
bloop
}
p