sed 명령을 사용하여 특정 텍스트 블록의 텍스트 일치

sed 명령을 사용하여 특정 텍스트 블록의 텍스트 일치

다음 텍스트가 있습니다.

client_encryption_options:
    enabled: true
    # If enabled and optional is set to true encrypted and unencrypted connections are handled.
    optional: false
    keystore: conf/.keystore
    keystore_password: cassandra

sed 명령을 사용하여 client_encryption_options 아래의 키 저장소 값을 변경하려고 합니다.

sed "/^client_encryption_options:/,+1s/keystore:.*/keystore: \/opt\/test/" $CASSANDRA_YAML_FILE > cassandra.yaml.tmp && mv cassandra.yaml.tmp $CASSANDRA_YAML_FILE

위 명령을 시도하면 conf/.keystore가 다음으로 대체되지 않습니다./opt/test/

답변1

아니요, 그렇지 않습니다.

당신은 내 솔루션을 사용하고 있습니다이전 질문. 질문은 구체적으로 다음 행의 값을 바꾸는 방법을 묻습니다. 이 질문에는 네 줄을 수정해야 합니다.

+1로 변경하면 +4문제가 해결될 수도 있습니다.

답변2

sed -e '
   /^client_encryption_options:/,/keystore:/!b
   //!b
   s|\(keystore:\).*|\1 /opt/test|
' < $CASSANDRA_YAML_FILE > cassandra.yaml.tmp && \
   mv cassandra.yaml.tmp "$CASSANDRA_YAML_FILE"

"sed"가 이를 지원하는 경우 "-i"(제자리에서 편집) 옵션을 사용하여 "mv"를 제거할 수도 있습니다.

sed -i.BAK -e 'your edit commands here' $_YOUR_YAML_FILE # Note: NO redirections here

관련 정보