如何使用 grep 命令删除符号 (|) 前的特定数字或字母

如何使用 grep 命令删除符号 (|) 前的特定数字或字母

我有 N 个像这样的文件中序列

>668|CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

>669|CAX10447 conserved protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

或者像这样

>gi|76167242|gb|AAX50250.1| hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

现在,我需要一个grep命令来删除第一行中的特定单词或数字。

输出应该是:

>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

或者

>AAX50250.1| hypothetical protein CTA_0001 [Chlamydia trachomatis A/HAR-13]
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRAAESRS
SSRTARGASSGYREYSPSAAR

我需要一个 grep 命令来执行此操作,我用过sed但它删除了第一行,即 ID,因此很难识别哪个序列是哪个。

答案1

看起来您想要删除最后一个|字符之前的所有内容。但是,您的第二个示例|在 ID 之后和 之前有一个hypothetical protein。据推测,在这种情况下,您想要删除最后一个字符之前|没有空格的所有内容。

以下是一种方法:

$ sed 's/| / /; s/^[^ ]*|/>/' file.pep 
>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>AAX50250.1 hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

删除s/| / /;任何|后跟空格的字符。这将从|中删除AAX50250.1|。在行首 ( )s/^[^ ]*|/>/处查找,并删除最长的非空格字符串 ( ) 字符,直到行末。>^>[^ ]|

答案2

如果你想用 grep 来做这件事。你应该在每个空行后读取 3 行并将其复制到变量中。你应该剪切变量的最后一部分。

解析器将会执行此操作;

第一reverse

第二cut串与|并得到第一

第三reverse

echo $yourstring |rev |cut -d'|' -f1|rev

顺便说一句,这不会删除,只会显示部分内容。如果您想保存输出,请将其重定向到文件。

echo $yourstring |rev |cut -d'|' -f1|rev > yournewfile

相关内容