首页 > 解决方案 > sed 删除第一个模式之后的所有内容(仅在该行中)

问题描述

假设我有一个文件,例如

>Species_Name|KIOOL
AATATATATACACACAAGAGAGGA
>SPECIES_name|KUI
AATTAGAGAGA
>Species_names|POPPO
ATATGAATATA

我怎么能在 bash 中获得一个新文件,例如:

>Species_Name
AATATATATACACACAAGAGAGGA
>SPECIES_name
AATTAGAGAGA
>Species_names
ATATGAATATA

我试过sed 's@|*@@'g my file但它不起作用

谢谢

标签: bashsed

解决方案


|*匹配零个或多个竖线。您似乎想要匹配一个垂直条,后跟零个或多个字母数字字符。尝试:

$ sed 's/|[[:alnum:]]*//' file
>Species_Name
AATATATATACACACAAGAGAGGA
>SPECIES_name
AATTAGAGAGA
>Species_names
ATATGAATATA

在修订后的问题中,您可能希望删除第一个竖线之后的所有内容。在这种情况下,替换[[:alnum:]].since.匹配任何内容:

$ sed 's/|.*//' file
>Species_Name
AATATATATACACACAAGAGAGGA
>SPECIES_name
AATTAGAGAGA
>Species_names
ATATGAATATA

推荐阅读