gpt4 book ai didi

linux - 替换偶数或奇数字符串匹配

转载 作者:太空宇宙 更新时间:2023-11-04 04:43:17 26 4
gpt4 key购买 nike

直接说:这不仅仅是匹配数字。

文档中的周围有很多**,我需要将它们替换为12

示例输入

**Lorem ipsum dolor **sit amet, consectetur adipisicing elit. ** 
Ad velit delectus ** quidem itaque eum **accusamus reprehenderit**
illo culpa **** praesentium** ea fugit ****hic in vel officiis,
expedita sit **** et harum enim quaerat, **** ab corporis quo
atque perspiciatis. Minima odit obcaecati** ** reiciendis, sed
rerum ** labore. In fuga, ** aspernatur earum aliquid ** ******
**commodi delectus?

期望的输出

1Lorem ipsum dolor 2sit amet, consectetur adipisicing elit. 1 
Ad velit delectus 2 quidem itaque eum 1accusamus reprehenderit2
illo culpa 12 praesentium1 ea fugit 21hic in vel officiis,
expedita sit 21 et harum enim quaerat, 21 ab corporis quo
atque perspiciatis. Minima odit obcaecati2 1 reiciendis, sed
rerum 2 labore. In fuga, 1 aspernatur earum aliquid 2 121
2commodi delectus?

我唯一想到的是做一个循环,替换找到的第一个匹配项 (s/\*{2}/1/),然后替换第二个匹配项 (s/\*{2}/2/),冲洗并重复,但由于我仍然不知道如何将其转换为 shellscript,我想知道这是否可以通过几个管道 sed 命令实现。

最佳答案

tr '\n' $'\x1' |
sed 's/\*\*/\x2/g' |
sed 's/\x2\([^\x2]*\)\x2/1\12/g; s/\x02/1/' |
tr $'\x1' '\n'
  1. 第一个tr用换行符替换等于十六进制数字 0x01 的不可读字符.
  2. 然后是第一个sed替代两个**对于六角 0x02 .
  3. 然后任意模式 0x02<anything>0x02替换为 1<anything>2
  4. 最后一个未匹配的\x021 取代.
  5. 然后是0x01被换行符替换回来。

现场版本tutorialspoint .

替代*对于 0x02是因为,我们无法沿着 sed 's/**\(^**\)**/... 做一些事情, IE。贪婪匹配字符串,直到找到多字符模式(或者我不知道该怎么做)。所以我只是替换两个字符 **通过一个不可识别的字符并处理它。这样我就可以处理单例 *正确,例如 **Lor*em ip*sum** .

如果你有 GNU sed -z选项,不需要替换换行符。

关于linux - 替换偶数或奇数字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54173961/

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