如何删除每行可变数字前后的所有内容?
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/ .*//'
我需要重命名文件中的所有序列 headers。
headers 以这种格式开始:
>D915_04184 transcript=D915_04184 gene=D915_04184
之后,它们应该只包含以下格式的序列 ID:
D915_04184
我需要为文件中的每个序列执行此操作。
我一直在尝试像
一样使用 sedsed '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/ .*//'