gpt4 book ai didi

linux - 如何使用 sed 识别多行中的模式

转载 作者:太空狗 更新时间:2023-10-29 12:10:33 24 4
gpt4 key购买 nike

所以我想将编号列表从一种特定形式转换为另一种形式。

来自这个表单:

1. numberedlist
2. one
3. two

到这个表格:

# numberedlist
# one
# two

我使用 sed 对该文件进行了另一次更改。因此,我想在第一种形式出现时使用 sed 来识别它,即使编号列表包含超过 3 个项目,也没有限制。

我的想法是:

first:调用包含模式的行(它是一个数字 > 一个点 > 一个空格.... '[[:digit:]]\. ') 到模式空间

second:调用模式 Space 的下一行并检查它是否包含 '[[:digit:]]\。 ' 与否。并继续这样做,直到下一行不连接 Regex.. 然后用#s 替换它。但是,是的,我不知道这是否可能。

这是我现在使用的:

s/[[:digit:]]\. /# /

但是是的,我知道这不是很有效。我对 sed 世界还是有点陌生​​,所以感谢您的帮助。谢谢。

编辑:很抱歉让大家感到困惑,我的目标是将列表索引更改为#。任何数字从 1. 到 #.我只想将编号列表转换为自动编号引擎的 Markdown 。

我不能使用像 s/[[:digit:]]\这样的东西。/#/ 因为它会改变模式的任何 acurence,即使它不是列表。

最佳答案

一种可能的 sed 解决方案:

sed -r 's/^[[:digit:]]+\. /# /g' <inputfile>
  • -r :将搜索模式视为扩展的正则表达式
  • /^[[:digit]]+\./#/g :查找以 1 个或多个数字开头后跟句点和空格的行,如果找到则替换为 # 后跟空格
  • 保留所有其他行(即不做任何更改)

例如:

$ cat datfile
1. numberedlist
2. one
3. two
where in the world is waldo
10. pickles
15. jam
# I'm just a comment
sky blue
100. bash
101. ksh
102. csh
72.don't touch this
# rubber ducky

我们的 sed 脚本的测试运行:

$ sed -r 's/^[[:digit:]]+\. /# /g' datfile
# numberedlist
# one
# two
where in the world is waldo
# pickles
# jam
# I'm just a comment
sky blue
# bash
# ksh
# csh
72.don't touch this
# rubber ducky

关于linux - 如何使用 sed 识别多行中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46045732/

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