INI 파일의 특정 섹션에서 몇 줄을 편집합니다.

INI 파일의 특정 섹션에서 몇 줄을 편집합니다.

~/.subversion/serversSubversion 구성 파일( ) 이 있습니다 .

프록시 정보(호스트, 포트, 예외)를 추가하려면 수정이 필요합니다. 파일에는 프록시 정보가 포함된 많은 섹션이 포함되어 있습니다. 그냥 수정하고 싶어요[글로벌].

이에 대한 정규식을 만들었지만 작동하지 않습니다.

/(\[global\].*[\n])((.*[\n])*)([\s\#]*http-proxy-port\s?=\s?.*)/gm

온라인 테스트를 해볼 수 있습니다.https://regex101.com/다음으로 대체하는 것이 좋습니다.

\1\2http-proxy-port=9000

sed위의 줄을 실행 해 보았 으나 아무 일도 일어나지 않았습니다.

sed -i -r 's/(\[global].*[\n])((.*[\n])*)([\s\#]*http-proxy-port\s?=\s?.*)/\1\2http-proxy-port=9000/gm' \
 ~/.subversion/servers

sed위 정규식을 어떻게 사용할 수 있나요 ?

이 예에서는 파일을 파괴합니다.

### The currently defined server options are:
###   http-proxy-host            Proxy host for HTTP connection
###   http-proxy-port            Port number of proxy host service
###   http-proxy-username        Username for auth to proxy service
###   http-proxy-password        Password for auth to proxy service
###   http-proxy-exceptions      List of sites that do not use proxy
###   http-timeout               Timeout for HTTP requests in seconds

[groups]
# group1 = *.collab.net
# othergroup = repository.blarggitywhoomph.com
# thirdgroup = *.example.com

### Information for the first group:
# [group1]
# http-proxy-host = proxy1.some-domain-name.com
# http-proxy-port = 80
# http-proxy-username = blah
# http-proxy-password = doubleblah
# http-timeout = 60

### Information for the second group:
# [othergroup]
# http-proxy-host = proxy2.some-domain-name.com
# http-proxy-port = 9000

### SSL certificate.  See details above for overriding security
### due to SSL.
[global]
# http-proxy-exceptions = *.domain.org, *.domain.com
# http-proxy-host = proxy.domain.com
# http-proxy-port = 8080
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword

예상되는 출력은 다음과 같습니다.

...
[global]
http-proxy-exceptions = *.otherdomain.org, *.otherdomain.com, 127.0.0.1, localhost
http-proxy-host = proxy.otherdomain.com
http-proxy-port = 9000
# http-proxy-username = defaultusername
# http-proxy-password = defaultpassword

답변1

제안한대로,INI 파일을 편집하는 더 좋은 방법이 있습니다...
하지만 이를 수행하는 방법은 다음과 같습니다 sed.

sed '/^\[.*\]/h
/http-proxy-exceptions/{x;/\[global\]/!{x;b;};x;c\
http-proxy-exceptions = *.otherdomain.org, *.otherdomain.com, 127.0.0.1, localhost
}
/http-proxy-host/{x;/\[global\]/!{x;b;};x;c\
http-proxy-host = proxy.otherdomain.com
}
/http-proxy-port/{x;/\[global\]/!{x;b;};x;c\
http-proxy-port = 9000
}' infile

라인 일치가 발견될 때마다 보유 버퍼는 패턴 공간 내용으로 덮어쓰여집니다 (즉, 각 섹션 이름은 이전 버퍼 [.*]에 저장됩니다 ). 패턴과 일치하는 모든 줄 h의 버퍼를 변경합니다 . - 예약된 공간이 일치하는 경우http-.*x아니요( !)가 일치 [global]하면 x다시 변경되어 다음 루프로 건너뜁니다 b. Keep 공간이 일치하면 다시 변경되어 [global]패턴 공간의 콘텐츠가 일시 중지됩니다.xc

관련 정보