패턴을 바꾸려면 여러 단어를 일치시키세요.

패턴을 바꾸려면 여러 단어를 일치시키세요.

다음과 같은 데이터가 포함된 파일이 있습니다.

.spec.nodes.brokers.runtime.properties.broker.http.numConnections=15
.spec.nodes.clients.runtime.properties.broker.http.numConnections=17
.spec.nodes.servers.runtime.properties.broker.http.numConnections=19

runtime.properties로 교체하고 싶습니다 '"runtime.properties"'. 여러 sed를 수동으로 수행할 수 있지만 패턴 일치를 사용하여 하나의 sed로 수행할 수 있는지 확인하고 싶습니다.

또한 이 키워드와 일치할 수 있는 다른 패턴이 있기 때문에 "runtime.properties"를 sed하고 바꿀 수는 없습니다. 뭔가를 일치시킨 .spec.nodes.<one of brokers, clients or servers>, 다음 교체 해야 합니다

.spec.nodes문자열의 어디에도 있을 수 없고 줄의 시작 부분에만 있을 수 있습니다.

답변1

주어진

$ cat file
.spec.nodes.brokers.runtime.properties.broker.http.numConnections=15
.spec.nodes.foo.runtime.properties.broker.http.numConnections=17
.spec.nodes.clients.runtime.properties.broker.http.numConnections=17
.spec.nodes.bar.runtime.properties.broker.http.numConnections=17
.spec.nodes.servers.runtime.properties.broker.http.numConnections=19

그 다음에

$ sed -E "/\.spec\.nodes\.(brokers|clients|servers)/s/runtime\.properties/'\"&\"'/" file
.spec.nodes.brokers.'"runtime.properties"'.broker.http.numConnections=15
.spec.nodes.foo.runtime.properties.broker.http.numConnections=17
.spec.nodes.clients.'"runtime.properties"'.broker.http.numConnections=17
.spec.nodes.bar.runtime.properties.broker.http.numConnections=17
.spec.nodes.servers.'"runtime.properties"'.broker.http.numConnections=19

또는

$ sed -E '/\.spec\.nodes\.(brokers|clients|servers)/s/runtime\.properties/'\''"&"'\''/'
file
.spec.nodes.brokers.'"runtime.properties"'.broker.http.numConnections=15
.spec.nodes.foo.runtime.properties.broker.http.numConnections=17
.spec.nodes.clients.'"runtime.properties"'.broker.http.numConnections=17
.spec.nodes.bar.runtime.properties.broker.http.numConnections=17
.spec.nodes.servers.'"runtime.properties"'.broker.http.numConnections=19

관련 정보