gpt4 book ai didi

linux - 使用 grep/sed/perl 在一行中提取多个项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:36 25 4
gpt4 key购买 nike

我有一个像这样的大文本文件:

=?accession=P12345;=?position=999;
=?accession=Q19283;=?position=777;
=?accession=A918282;=?position=888;

我想提取 accession= 之间的术语和 ; , 然后也在 position= 之间和 ;

所以我得到:

P12345 999
Q19283 777
A918282 888

我需要在它们之间进行 grep 处理的字符串确实变得更加复杂,所以我设想了一个硬编码解决方案。

我知道我可以采用“两个字符串之间的 grep”方法:

grep -Po 'accession= \K.*(?= ;)'

但我不知道如何从输入的同一行中提取后续内容,使其也出现在与输出相同的行中。

我真的不介意这是如何完成的,只要我可以从 linux 命令行调用它即可。

谢谢。

最佳答案

  1. 您可以像这样更新您的 grep 表达式。

    grep -oP "(accession=\K\w+)|(position=\K\d+)" file

    输出:

    P12345
    999
    Q19283
    777
    A918282
    888

    要按照您想要的方式格式化,请使用 paste :

    grep -oP "(accession=\K\w+)|(position=\K\d+)" file | paste -d ' ' - -

    输出:

    P12345 999
    Q19283 777
    A918282 888
  2. 另一个简单的 awk 解决方案:

    awk -F"=|;" '{print $3, $6}' file

    输出:

    P12345 999
    Q19283 777
    A918282 888

关于linux - 使用 grep/sed/perl 在一行中提取多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969954/

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