我有一个文本正文,其中包含用<>,##或||分隔的组。 块永远不会重叠,但可能会跨越多行,如下所示:
#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'
但是当我尝试使用&amp; (或(..)+ \ 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[.
我不确定这里出了什么问题 - 它似乎在某种程度上与模块有关。我可以用三个调用替换它(每个匹配类型硬编码一个),但这似乎过多了。
答案 0 :(得分:4)
尝试以下命令。它读取内存中的整个文件,并为每对分隔符执行全局替换:
sed -e '
:a
$! { N; ba };
s/#\([^#]*\)#/[\1]#/g;
s/<\([^>]*\)>/[\1]>/g;
s/|\([^|]*\)|/[\1]|/g
' infile
它产生:
[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]#.