次のサンプルファイルがあります。
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
2 つの単語の間のパターンの末尾に文字を追加します。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"
}
次のスペースは^
各行の前にスペースがあるため(与えられた例では)、これらのスペースがない場合は削除してください。