다음과 같은 샘플 파일이 있습니다.
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 = "A
CLKA
TEST1A
또한 라인 조언의 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"
}
다음 공백은 ^
각 줄 앞에 공백이 있기 때문에(주어진 예에서) 이러한 공백이 없으면 제거하십시오.