删除以特定字符开头的行中空格后的所有字母

我有一个大的fasta文件,我想删除标题行中以特定字符/符号( > )开头的第一个空格后的所有字母。

这是一个示例输入文件:

 >AB3446 human helix ACGTGAGATGGATAGA GATAGATAGATAGACACA >AH4567 human beta sheet ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

特定

 $ cat file.fasta >AB3446 human helix ACGTGAGATGGATAGA GATAGATAGATAGACACA >AH4567 human beta sheet ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

然后

 $ sed '/^>/ s/ .*//' file.fasta >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

在以>开头的每一行上替换从第一个空格(包括)开始的所有内容


或者,使用awk

 $ awk '/^>/ {$0=$1} 1' file.fasta >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

假设您的问题中的示例数据存储在file.txt ,您可以使用sed处理文本并删除(包括)以>开头的每行中的第一个空格字符后的所有内容:

 $ sed -r 's/^(>\S+)\s.*/\1/' file.txt >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

如果命令sed -r 's/^(>\S+)\s.*/\1/' file.txt为您生成正确的输出,您可以告诉它就地修改给定文件,而不仅仅是通过向此sed命令添加-i选项来显示输出:

 sed -r -i 's/^(>\S+)\s.*/\1/' file.txt 

这样做很简单。 -r启用扩展正则表达式,为我们提供了更多function来在我们的命令中定义正则表达式模式,即s/PATTERN/REPLACEMENT/ here。

PATTERN是正则表达式^(>\S+)\s.* ,它匹配行开头的>字符( ^ ),后跟至少一个非空白字符( \S+ ),一个空格字符( \s ,可以是正常的空白,制表符等)然后是整行的其余部分( .*是任意数量的任何字符)。

REPLACEMENT\1 ,它告诉sed使用匹配行作为替换的第一个捕获组的内容(最左边的一对圆括号内的模式匹配的内容(...) )。 在我们的例子中,这是第一个空白的所有内容。

便携式shell方式

使用分词:

 $ while read -r one two;do echo "$one" ;done < input.txt >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

使用case和参数替换:

 $ while IFS= read -r line;do case "$line" in ">"*) printf "%s\n" "${line%% *}";;*)printf "%s\n" "$line";;esac ;done < input.txt >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

Perl的

 $ perl -lane '$_=$F[0] if $F[0] =~ /^>/;print' input.txt >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

不便携的bash方式

 $ bash -c 'for((i=0;;i++)); do IFS= read -r line || break; [[ $line =~ ^\> ]] && line=${line/ */} ;echo "$line" ;done' < input.txt >AB3446 GATAGATAGATAGACACA >AH4567 ACGTGATAGATGAGACGATGCCC CACGGGTATATAGCCCAA 

假设其他行只包含一个单词(如示例中所示),这非常简单:

 cut -f 1 -d " " file.fasta