在每个向前箭头 (>) 前面添加一个新行 (\n)

在每个向前箭头 (>) 前面添加一个新行 (\n)

我的file1.fa格式如下:

>XXX[YY]
ZZZZZZ>XXX[YY]
ZZZZZZ>XXX[YY]
ZZZZZZ

我试图使用 sed 命令在前进箭头之前添加新行,但它不起作用。

sed 's/ \?\>/ \n\>/g' file1.fa > file2.fa

所需的文件格式:

>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

我已经尝试过与其他角色一起使用,并且脚本运行得很好。

我想知道在 sed 中处理前向箭头时是否必须包含任何限制?或者有人知道这里出了什么问题吗?

答案1

你不应该逃避>\>是一个特殊的字边界图案)。

这对我有用(使用 GNU sed):

 sed -e 's/>/\n>/g' file1

对于你的情况,我得到的输出是:


>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

答案2

\>是一种特殊模式,将匹配单词和非单词字符之间的零宽度空格。从任何意义上来说, the>都不特殊,因此不需要对其进行转义。

>要在除第一行之外的每一行之前添加换行符,使用 standard sed,您可以这样做

$ sed '2,${ y/>/\n/;s/\n/&>/g; }' file
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

标准sed无法使用 插入换行符s/>/\n>/g,因此我们必须分两步完成。

寻址2,$输入中除初始行之外的所有行。其中的命令{ ... }将应用于这些行。

该命令正在用换行符y/>/\n/替换该字符的所有实例。>命令y在标准中插入换行符sed

将每个生成的换行符替换s/\n/&>/g为匹配的换行符,后跟>。当&出现在命令的替换部分时s,它会插入任何匹配的模式。

答案3

我尝试了下面的方法,效果很好

命令: sed "/^[^>]/s/>.*/\n&/g" filename

输出

sed "/^[^>]/s/>.*/\n&/g" filename
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ
>XXX[YY]
ZZZZZZ

相关内容