如何删除每行可变数字前后的所有内容?

How do you remove everything before and after a variable number on each line?

我需要重命名文件中的所有序列 headers。

headers 以这种格式开始:

>D915_04184 transcript=D915_04184 gene=D915_04184

之后,它们应该只包含以下格式的序列 ID:

D915_04184

我需要为文件中的每个序列执行此操作。

我一直在尝试像

一样使用 sed
sed 's/'>D915' 'transcript=' 'gene='/D915/g' file_Name >new_file_name

但这并没有奏效。我也试过 grep -o,但似乎什么也没做。

我经常设法从一开始就把 > 去掉,但似乎无法去掉其他任何东西。 04184 需要保留,并且每一行的数字都不同。 >D915 是一致的。

这应该有效:

sed -r 's/>//;s/\ .*//g' filename > new_file_name

我认为您应该看一看 here 以了解 sed 的工作原理。

请试试这个:

如果你想保留第一部分:

sed -E 's/(>D915_[0-9]+).*//g;s/ >//g' 

() <-- 用于记忆模式 >D915_[0-9]+ <-- 表示以 D915_ 开头的字符串,后跟任何重复的数字。

演示:

  $echo " >D915_04184 transcript=D915_04184 gene=D915_04184"  | sed -E 's/(>D915_[0-9]+).*//g;s/ >//g' 
D915_04184
$

如果D915_也会改变那么

sed 's/transcript.*//g; s/ >//g'

演示:

$echo " >D915_04184 transcript=D915_04184 gene=D915_04184"  | sed 's/transcript.*//g; s/ >//g' 
D915_04184 

您可以通过多种方式将该输入字符串转换为问题中显示的输出。您选择的那个可能取决于您提供的样本日期中未显示的输入变化。

您可以删除每一行中的所有内容,直到最后一个等于:

sed 's/.*=//'

或者您可以删除第一个 space 之后的所有内容,然后删除第一个字符:

sed -e 's/ .*//' -e 's/.//'

或者你可以抓取 "transcript" 字段的内容,并去掉其他位:

sed -e 's/.*transcript=//' -e 's/ .*//'

为了便于阅读,我使用了多个 -e 表示法。您也可以将最后一个更简洁地写为:

sed 's/.*transcript=//;s/ .*//'