gpt4 book ai didi

regex - 使用grep提取不以3个二进制数字开头的6个任意数字

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:18 26 4
gpt4 key购买 nike

我收到了一个作业,我正在努力解决这个问题,稍微简化一下,我需要从不能以 3 个二进制数字开头的数据集中提取 6 个任意数字。我只被允许使用 grep 命令。例如,从这个数据集中:

578696344678
100307548
105768

我想提取这些片段:

578696
344678
307548
105768

因此允许在同一行上进行多次匹配,并且可以从少于 3 个二进制数字开始,但不能正好是 3 个二进制数字。我已经摆弄了各种正则表达式概念,但到目前为止我只有这个基本代码,因为我没有经验的头脑看不出任何可能的方法来分隔二进制数字:

grep -o '[0-9]\{6\}'

最佳答案

只要你能使用 GNU grep,而不是 POSIX grep,你就可以使用 PCRE:

$ echo "$txt"
578696344678
100307548
105768

$ echo "$txt" | grep -oP '(?:[01]{3})?\K(\d{6})'
578696
344678
307548
105768

GNU grep 是 Linux 上的默认设置,但不是 macOS 或 BSD。

Explanation of regex

使用 POSIX grep,您需要使用更改来查找所有以二进制数字开头的 9 位数字或 6 位数字的模式,然后过滤到末尾所需的 6 位数字:

$ echo "$txt" | grep -Eo '[01]{3}[[:digit:]]{6}|[[:digit:]]{6}' | grep -Eo '[[:digit:]]{6}$'
578696
344678
307548
105768

关于regex - 使用grep提取不以3个二进制数字开头的6个任意数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459894/

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