Text 使用sed命令删除特定行中的所有数字

Text 使用sed命令删除特定行中的所有数字,text,sed,replace,Text,Sed,Replace,这可能存在于其他地方,但我找不到它。我的目标是从blast搜索中删除额外的数字,以便在保留数字序列id的同时提取序列数据 原始: >k141_100041 flag=0 multi=242.9841 len=43238 Sbjct 16375 MSEELTQNSGSNYSASSIQVLEGLEAVRKRPAMYIGDISEKGLHHLVYEVVDNSIDEALA 16196 Sbjct 16195 GYCTHIEVTINEDNSITVQDNGRGIPVDFHEKEKKSALEVV

这可能存在于其他地方,但我找不到它。我的目标是从blast搜索中删除额外的数字,以便在保留数字序列id的同时提取序列数据

原始:

>k141_100041 flag=0 multi=242.9841 len=43238
Sbjct  16375  MSEELTQNSGSNYSASSIQVLEGLEAVRKRPAMYIGDISEKGLHHLVYEVVDNSIDEALA  16196
Sbjct  16195  GYCTHIEVTINEDNSITVQDNGRGIPVDFHEKEKKSALEVVMTVLHAGGKFDKGSYKVSG  16016
Sbjct  16015  GLHGVGVSCVNALSTHMTTNVFRNGKIYQQEYECGKPLYAVKEVGTTDITGTRQTFWPDG  15836
Sbjct  15835  SIFTVTEYKYSILQARMRELAYLNKGITITLTDKRVKEEDGSYKQEKFHSEEGVKEFVRF  15656
Sbjct  15655  LNSNNTPLIDDVIYLNTEKQGIPIECAIMYNTGFRENLHSYVNNINTIEGGTHEAGFRMA  15476
Sbjct  15475  LTRVLKKYAEESKALEKAKVEISGEDFREGLIAVISVKVSEPQFEGQTKTKLGNNEVSGA  15296
Sbjct  15295  VNQAVGEALTYYLEEHPKEAKIIVDKVVLAATARVAARKARESVQRKSPMGGGGLPGKLA  15116
Sbjct  15115  DCSSRVAEECELFLVEGDSAGGSAKQGRSRQFQAILPLRGKILNVEKAMWHKAFESDDVN  14936
Sbjct  14935  NIIQALGVRFGVDGEEDSKKANIDKLRYHKVIIMTDADVDGSHIDTLIMTLFYRYMPEVI  14756
Sbjct  14755  QGGHLYIATPPLYKCSKGKISEYCYTDEARQAFIQKYGEGNEQGIHTQRYKGLGEMNPEQ  14576
Sbjct  14575  LWETTMNPETRILKQVNIENAAEADYIFSMLMGDDVGPRREFIEKNATYANIDA  14414
目标:

我可以使用sed命令轻松删除'Sbjct'行和数字,但我不知道如何从sed命令中免除id行(k141_112817…)。任何帮助都将受到感谢

sed -E '/^>/n;s/\S+\s*//4;s///2;s///1' file
GNU与
-E
一起使用以允许扩展正则表达式

  • /^>/n
    保留以
    开头的行(使用
    n
    命令)
  • s/\s+\s*//4
    删除第四个单词<代码>\S是非空白
  • s///2
    删除第二个单词(替换中的空匹配项将使用上一个匹配项)
  • s///1
    删除第一个单词

我认为
sed
是错误的工具,因为您似乎想要:

awk '/^Sbjct/{$0 = $3}1' input-file
这可能适用于您(GNU-sed):

当遇到以
Sbjct
开头的行时,删除前两个字段和最后一个字段(以及中间的空格)


这是sed可解的,但在这种情况下,我同意William Pursell的观点,并将使用Awk。

sed-n-r'1p;s/([^]+)\s+([^]+)\s+(.{61})。*/\3/gp'inputfile
应该帮助您简单地匹配需要处理的行,并用行中选定的字符范围替换整行。类似这样的:
sed-e的/Sbjct[[:space:][[:space:]*[0-9][0-9]*[:space:][:space:]*\([^[:space:]]]*\[:space:]./\1/'input
上面的方法同样有效,但我认为使用awk命令(下面)是一种更简单的方法。谢谢你的意见!是的,你完全正确,它工作得非常完美,我认为它比sed命令要简单得多。非常感谢你的帮助!
awk '/^Sbjct/{$0 = $3}1' input-file
sed -E '/^Sbjct/s/.* .* (\S+) .*/\1/' file