gpt4 book ai didi

sed - 替换sed中的多个分隔 block

转载 作者:行者123 更新时间:2023-12-04 20:10:36 25 4
gpt4 key购买 nike

我有一个文本正文,其中包含用 <>、## 或 || 分隔的组。
这些块永远不会重叠,但可能会跨越多条线,如下所示:

#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[.

我不确定这里出了什么问题 - 它似乎以某种方式与模式块搞砸了。我可以用三个调用替换它(每个匹配类型硬编码一个),但这似乎过度了。

最佳答案

尝试以下命令。它读取内存中的整个文件并对每对分隔符进行全局替换:

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]#.

关于sed - 替换sed中的多个分隔 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17729025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com