sed 추가 명령을 연결하는 방법은 무엇입니까?

sed 추가 명령을 연결하는 방법은 무엇입니까?

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

관련 정보