gpt4 book ai didi

regex - SED:同一行上有多个模式,如何匹配/解析第一个

转载 作者:行者123 更新时间:2023-12-03 14:36:57 44 4
gpt4 key购买 nike

我有一个文件,其中包含电话号码数据以及一些无用的东西。
我正在尝试解析数字,并且当只有1个电话号码/线路时,这没问题。
但是当我有多个数字时,sed匹配最后一个数字(即使到处都说它应该只匹配第一个模式?),而我无法获取其他数字。

我的data.txt:

bla bla bla NUM:09011111111 bla bla bla bla NUM:08022222222 bla bla bla


当我解析数据时,我的想法是首先删除第一个电话号码前面的所有“初始”“ bla bla bla”(因此我搜索首次出现的“ NUM:”),然后删除所有内容电话号码后,然后获取号码。
之后,我想解析剩余字符串中的下一个匹配项。

所以现在当我尝试sed时,我总是会得到行中的最后一个数字:

>sed 's/.*NUM://' data.txt
08022222222 bla bla bla
>


首先,我想了解我对SED的理解出了什么问题。当然,欢迎提出更有效的建议!
我的sed命令不是说用“(空)”替换“ NUM:”之前的所有内容吗?为什么总是匹配最后一次出现?

谢谢!

最佳答案

这可能对您有用:

echo "bla bla bla NUM:09011111111 bla bla bla bla NUM:08022222222 bla bla bla" |
sed 's/NUM:/\n&/g;s/[^\n]*\n\(NUM:[0-9]*\)[^\n]*/\1 /g;s/.$//'
NUM:09011111111 NUM:08022222222


您遇到的问题是理解 .*是贪婪的,即它匹配最长匹配而不是第一个匹配。通过在我们感兴趣的字符串前面放置一个唯一字符( \n sed将其用作行定界符,因此它不能存在于行中),并删除所有不是该唯一字符 后跟唯一字符 NUM:...,我们有效地将字符串分成了易于管理的部分。

关于regex - SED:同一行上有多个模式,如何匹配/解析第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9681393/

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