如何使用 sed 删除特定字符后的数字?
How can I remove numbers after a specific character with sed?
我需要修改一个 .fasta 文件,如下所示:
>Contig_1;2
AGATC...
>Contig_2;345
AaGGC...
>Contig_3;22
GGAGA...
并将其转换为:
>Contig_1
AGATC...
>Contig_2
AaGGC...
>Contig_3
GGAGA...
我尝试执行以下操作,但没有按预期工作。
sed -i 's/;*\n/\n/g' file.fasta
有人可以给我一些建议吗?谢谢!
你可以使用
sed -i 's/;[^;]*$//' file.fasta
参见 online demo:
s='>Contig_1;2
AGATC...
>Contig_2;345
AaGGC...
>Contig_3;22
GGAGA...'
sed 's/;[^;]*$//' <<< "$s"
输出:
>Contig_1
AGATC...
>Contig_2
AaGGC...
>Contig_3
GGAGA...
请注意 sed
不会将换行符放入模式 space 中(因为您使用的是 GNU sed
,您可以使用 [=15= 强制它这样做],但这里没有必要),并且您不能在 sed 命令中将换行符与 \n
匹配。
;[^;]*$
模式匹配
;
- 一个 semi-colon
[^;]*
- ;
以外的任何零个或多个字符(如果您需要确保匹配数字,请替换为 [0-9]*
或 [[:digit:]]*
)
$
- 字符串结尾。
请注意,此处不需要 g
标志,因为此命令需要每行执行一次替换。
第一个解决方案: 你可以用awk
让它变得非常简单。用你展示的示例编写,在 GNU awk
.
awk -F';' '/^>/{NF=1} 1' Input_file
解释: 简单的解释就是,将所有行的字段分隔符设置为;
。在主程序检查条件中,如果行从 >
开始,则将 NF
(字段数)设置为 1,这将在第一次出现 ;
.
之前保留值
第二个解决方案 你想寻找所有类型的线(无论是否以 >
开头)并且你在第一次出现 ;
之前需要值,然后尝试以下解决方案:
awk -F';' '/;/{NF=1} 1' Input_file
我们可以结合使用cat
命令和awk
来显示输出。
cat filename | awk -F ';' '{print }'
这里';'将作为文件分隔符,然后屏幕上只会显示第一个字段。
我需要修改一个 .fasta 文件,如下所示:
>Contig_1;2
AGATC...
>Contig_2;345
AaGGC...
>Contig_3;22
GGAGA...
并将其转换为:
>Contig_1
AGATC...
>Contig_2
AaGGC...
>Contig_3
GGAGA...
我尝试执行以下操作,但没有按预期工作。
sed -i 's/;*\n/\n/g' file.fasta
有人可以给我一些建议吗?谢谢!
你可以使用
sed -i 's/;[^;]*$//' file.fasta
参见 online demo:
s='>Contig_1;2
AGATC...
>Contig_2;345
AaGGC...
>Contig_3;22
GGAGA...'
sed 's/;[^;]*$//' <<< "$s"
输出:
>Contig_1
AGATC...
>Contig_2
AaGGC...
>Contig_3
GGAGA...
请注意 sed
不会将换行符放入模式 space 中(因为您使用的是 GNU sed
,您可以使用 [=15= 强制它这样做],但这里没有必要),并且您不能在 sed 命令中将换行符与 \n
匹配。
;[^;]*$
模式匹配
;
- 一个 semi-colon[^;]*
-;
以外的任何零个或多个字符(如果您需要确保匹配数字,请替换为[0-9]*
或[[:digit:]]*
)$
- 字符串结尾。
请注意,此处不需要 g
标志,因为此命令需要每行执行一次替换。
第一个解决方案: 你可以用awk
让它变得非常简单。用你展示的示例编写,在 GNU awk
.
awk -F';' '/^>/{NF=1} 1' Input_file
解释: 简单的解释就是,将所有行的字段分隔符设置为;
。在主程序检查条件中,如果行从 >
开始,则将 NF
(字段数)设置为 1,这将在第一次出现 ;
.
第二个解决方案 你想寻找所有类型的线(无论是否以 >
开头)并且你在第一次出现 ;
之前需要值,然后尝试以下解决方案:
awk -F';' '/;/{NF=1} 1' Input_file
我们可以结合使用cat
命令和awk
来显示输出。
cat filename | awk -F ';' '{print }'
这里';'将作为文件分隔符,然后屏幕上只会显示第一个字段。