중괄호 안에 나타나는 특정 텍스트 바꾸기

중괄호 안에 나타나는 특정 텍스트 바꾸기

다음과 같은 샘플 파일이 있습니다.

 WEA {
     Direction = Input
     Tag = WriteEnable
     PortId = "A"
 }
 MEA {
     Direction = Input
     Tag = MemoryEnable
     PortId = "A"
 }
 CLKA {
     Direction = Input
     Tag = Clock
     PortId = "A"
 }
 TEST1A {
     Direction = Input
     Tag = None
     TieLevel = TestBench
     PortId = "A"
     SafeValue = "1'b0"
 }

교체하려고 하는데 모듈 PortId = "A"에서만 PortId = "A B"가능합니다 .CLKA{ }

주어진 코드를 일부 수정해 보았습니다.

sed ':again;$\!N;$\!b again; s/{[^}]*}//g' file

이전 기사에서중괄호 안의 텍스트 제거

이것을 시도했지만 sed ':again;$\!N;$\!b again; s/CLKA {[^}]*}//g'전체 CLKA { }모듈 을 삭제했습니다.

답변1

이 시도:

sed '/CLKA/,/TEST1A/ { s/PortId = \"A/& B/; }' file

이 sed 명령은 B두 단어 사이의 패턴 끝에 문자를 추가합니다.PortId = "ACLKATEST1A

또한 라인 조언의 start( ^) 및 end()를 사용하여 모듈 내에서만 일치/교체할 수도 있습니다. 다음을 포함하는 행만 일치하고 다음을 포함하는 행만 일치합니다.$PortId = "A"CLKA { ... }^ CLKA {$ CLKA {^ }$ }

입력하다:

CLKA {
     PortId = "A"
}

 CLKA {    
     Direction = Input
     Tag = Clock
     PortId = "A"
 }

주문하다:

sed '/^ CLKA {$/,/^ }$/ { s/PortId = \"A/& B/; }' file

산출:

CLKA {
     PortId = "A"
}

 CLKA {    
     Direction = Input
     Tag = Clock
     PortId = "A B"
 }

다음 공백은 ^각 줄 앞에 공백이 있기 때문에(주어진 예에서) 이러한 공백이 없으면 제거하십시오.

관련 정보