我的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