中かっこ内に表示される特定のテキストを置き換える

中かっこ内に表示される特定のテキストを置き換える

次のサンプルファイルがあります。

 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 コマンドは、B2 つの単語の間のパターンの末尾に文字を追加します。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"
 }

次のスペースは^各行の前にスペースがあるため(与えられた例では)、これらのスペースがない場合は削除してください。

関連情報