5
我有一個文本正文,其中包含使用<>,##或||分隔的組。 塊從未重疊,但也可以跨越多行,像這樣:替換sed中的多個分隔塊
#A fully emphasized line#
A line with #emphasis inside#.
#Several lines of
text
With emphasis#
no emphasis
Line #with# multiple #emphasis#.
Line <with some > |text of| #each type#.
我試圖與[和] 和放後]最終定界符來替換每對分隔符;例如最後一行應該是:
Line [with some ]> [text of]| [each type]#.
我已經形成了sed腳本將做的第一部分:
sed -e ':left s/[#|<]/[/; t right; n; b left :right s/[#|>]/]/; t left;n; b right'
但是當我嘗試使用&(或(..) + \ 1)把字符回這樣的:
sed -e ':left s/[#|<]/[/; t right; n; b left :right s/[#|>]/]&/; t left;n; b right'
我得到如下:
[A fully emphasized line][
A line with ][emphasis inside][.
][Several lines of
text
With emphasis][
no emphasis
Line ][with][ multiple ][emphasis][.
Line [with some ]]]]]]> [text of[ [each type[.
雖然我不確定這裏出了什麼問題,但它似乎是以某種方式與圖案塊混在一起。我可以用三個調用(每個匹配類型一個硬編碼)替換它,但這似乎過分。
酷。合併版本也適用於此,所以三個搜索可以用's/[#|替換<]\([^#|>] * \)\([#|>]] \)/ [\ 1] \ 2/g;' –
user2596375 - 三個sed表達式更好,因爲您的模式取代了任何一對分隔符,例如,'#text>'將被'[text]>替換,即使它不是'#text#'。 – gbrener