SED 명령을 사용하여 구성 파일에 변경 사항을 적용하고 싶습니다. 이 경우 시작 태그 뒤의 여러 위치에 일부 줄을 삽입해야 합니다.
그러나 내가 시도했을 때 :
sed '/\[httpd/\]/a secure_rewrites = false; /\[couchdb/\]/adelayed_commits = false' local.ini
[httpd] 뒤에 다음 줄이 추가된 것을 발견했습니다.
secure_rewrites = false [couchdb]/adelayed_commits=false
이것은 분명히 내가 원하는 것이 아닙니다.
추가 명령을 연결할 수 있나요?
답변1
GNU로sed
a text
하위 명령은 추가할 텍스트를 조작합니다. 이 텍스트는 줄 끝까지 읽혀집니다. 다음 트릭을 적용하여 개행을 모방할 수 있습니다.
sed '/\[httpd\]/a secure_rewrites = false;
/\[couchdb\]/adelayed_commits = false' local.ini
예제 출력:
...
[httpd]
secure_rewrites = false;
...
[couchdb]
delayed_commits = false
답변2
GNU 사용 sed
( sed
추가된 문자열에 리터럴 개행 문자를 포함하지 않는 한 BSD는 추가된 텍스트 뒤에 개행 문자를 추가하지 않습니다):
sed -e '/\[httpd\]/a\' -e 'secure_rewrites = false;' \
-e '/\[couchdb\]/a\' -e 'delayed_commits = false;' local.ini
파일에 다음이 포함된 경우
[httpd]
[couchdb]
처음에는 위 sed
명령을 실행하면
[httpd]
secure_rewrites = false;
[couchdb]
delayed_commits = false;
또한 a
텍스트를 추가하는 명령은 a\
추가된 텍스트 뒤에 작성해야 합니다. GNU는 sed
생략을 허용합니다 \
.
sed
스크립트 로 (모든 에서 작동 sed
):
/\[httpd\]/a\
secure_rewrites = false;
/\[couchdb\]/a\
delayed_commits = false;
이는 명령줄에서 리터럴 작은따옴표로 묶인 스크립트 문자열로 사용하거나 sed
(새 줄은 마지막 줄 뒤에 와야 함) 별도로 저장하고 다음을 sed
사용하여 입력할 수 있습니다.
$ sed -f script.sed local.ini
를 사용하면 #!/usr/bin/sed -f
첫 번째 줄(경로가 sed
정확하다고 가정)에서 스크립트를 직접 실행할 수도 있습니다.
$ ./script.sed local.ini