代码之家  ›  专栏  ›  技术社区  ›  Le Thuan

grep可以只显示我想要的结果吗

  •  1
  • Le Thuan  · 技术社区  · 6 年前

    我有这样的数据

    tatusx2.atc?beginnum=0;8pctgRB Mwdf fgEio"text1"text4"text
    tatqsx3.atc?beginnum=1;8pctgRBwsaNezxio"text2
    tatssx4.atc?beginnum=2;8pctgsvMALNejkio"data2
    tatksx4.atc?beginnum=1;8pctgxdfALNebfio"text3
    tatzsx5.atc?beginnum=3;8pwerRBMALNetior"datac
    

    如何仅获取之间的数据;和“ 我试过了 grep -oP ';.*?"' file 并得到输出:

    ;8pctgRBMwdffgEio"
    ;8pctgRBwsaNezxio"
    ;8pctgsvMALNejkio"
    ;8pctgxdfALNebfio"
    ;8pwerRBMALNetior"
    

    但我想要的输出是:

    8pctgRB Mwdf fgEio
    8pctgRBwsaNezxio
    8pctgsvMALNejkio
    8pctgxdfALNebfio
    8pwerRBMALNetior
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   azmath    6 年前

    您需要使用lookahead和lookbehind正则表达式

    grep -oP '(?<=;)\w*(?=")'

    我认为你在玩儿 regexr 了解有关正则表达式的更多信息。检查他们的备忘单。

        2
  •  1
  •   Spade    6 年前

    编写所需表达式的更具可读性的方法是:

    grep -oP '(?<=;).*(?=")' file
    

    并将为您提供所需的结果。PERL正则表达式显然是实验性的,但某些模式可以正常工作。

    正在使用以下选项:

    -o --only-matching to the print only the matched parts of a matching line
    -P --perl-regexp
    

    使用 ?=; 将为您获取以开头的字符串 ; 但是使用 > 您可以在之后开始索引。类似地,指定了结束字符串标记。

    建议如下 additional reading