gpt4 book ai didi

regex - 使用 bash 仅匹配第一段

转载 作者:行者123 更新时间:2023-12-03 16:42:50 25 4
gpt4 key购买 nike

我们有
...包含段落的文件,由 2 个换行符分隔 \r\n\r\n\n\n .段落本身可能包含单个换行符 \r\n\n .目标是使用 Bash one-liner 来匹配 只有第一段并将其打印到标准输出。
例如。:

$ cat foo.txt
Foo
* Bar

Baz
* Foobar

Even more stuff to match here.
结果是:
$ cat foo.txt | <some-command>
Foo
* Bar
我已经试过了
...这个正则表达式 (?s)(.+?)(\r?\n){2}|.+?$grep使用
  • Windows 上的 GIT Bash (GNU grep 3.1),
  • 在 Lubuntu 20.4.1 LTS (GNU grep 3.4) 和
  • 上 bash
  • Mac 上的 iTerm+Fish(BSD grep 2.5.1-FreeBSD)。

  • 前两种方法导致:
    $ grep -Poz '(?s)(.+?)(\r?\n){2}|.+?$' foo.txt
    Foo
    * Bar

    Baz
    * Foobar

    由于 BSD grep 和 GNU grep 之间的差异,Mac 上的方法失败了。

    ...在 regex101.com 上,此正则表达式适用于 foo.txt: https://regex101.com/r/uoej8O/1 .这可能是由于禁用了 global旗帜?

    最佳答案

    您可以使用 GNU grep像这样:

    grep -Poz '(?s)^.+?(?=\R{2}|$)' file
    PCRE regex demo .
    详情
  • (?s) - 一个 DOTALL 内联修饰符,使 .匹配包括换行符在内的所有字符
  • ^ - 整个字符串的开头
  • .+? - 任何 1 个或多个字符,尽可能少
  • (?=\R{2}|$) - 正前瞻,匹配紧跟双换行序列 ( \R{2} ) 或字符串结尾 ( $ ) 的位置。
  • 关于regex - 使用 bash 仅匹配第一段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64891470/

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