Linux 在SED中连接带条件的换行符
我有如下数据:Linux 在SED中连接带条件的换行符,linux,bash,unix,sed,Linux,Bash,Unix,Sed,我有如下数据: > sq1 foofoofoobar foofoofoo > sq2 quxquxquxbar quxquxquxbar quxx > sq3 foofoofoobar foofoofoo > sq4 foofoofoobar foofoo 我想在“>sqi”标题的基础上连接线作为截止线, i、 e.屈服: foofoofoobarfoofoofoo quxquxquxbarquxquxquxbarquxx foofoofoobarfoofoofoo f
> sq1
foofoofoobar
foofoofoo
> sq2
quxquxquxbar
quxquxquxbar
quxx
> sq3
foofoofoobar
foofoofoo
> sq4
foofoofoobar
foofoo
我想在“>sqi”标题的基础上连接线作为截止线,
i、 e.屈服:
foofoofoobarfoofoofoo
quxquxquxbarquxquxquxbarquxx
foofoofoobarfoofoofoo
foofoofoobarfoofoo
我尝试使用此sed
,但失败:
sed '/^S/d;N;s/\n/\t/'
正确的方法是什么?您正在测试行首的大写字母“s”。您应该测试大于字符:
sed '/^>/d;N;s/\n/\t/'
或
编辑:我忽略了一个事实,即标题之间的行数可变。这就是我到目前为止所做的:
sed -n '/^>/{x; p; d}; /^>/!H; x; s/\n/\t/; h; $p'
不幸的是,这会在标题中留下:
> sq1 foofoofoobar foofoofoo
> sq2 quxquxquxbar quxquxquxbar quxx
> sq3 foofoofoobar foofoofoo
> sq4 foofoofoobar foofoo
如果从Bash提示符执行此操作,则可能必须先执行set+H
,这样就不会因为感叹号而受到历史扩展干扰
Edit2:删除标题的修订版:
sed -n '1{x;d};/^>/{x; p; d}; H; x; s/\n/\t/; s/^>.*\t//; h; $p'
您正在测试该行开头的大写字母“S”。您应该测试大于字符:
sed '/^>/d;N;s/\n/\t/'
或
编辑:我忽略了一个事实,即标题之间的行数可变。这就是我到目前为止所做的:
sed -n '/^>/{x; p; d}; /^>/!H; x; s/\n/\t/; h; $p'
不幸的是,这会在标题中留下:
> sq1 foofoofoobar foofoofoo
> sq2 quxquxquxbar quxquxquxbar quxx
> sq3 foofoofoobar foofoofoo
> sq4 foofoofoobar foofoo
如果从Bash提示符执行此操作,则可能必须先执行set+H
,这样就不会因为感叹号而受到历史扩展干扰
Edit2:删除标题的修订版:
sed -n '1{x;d};/^>/{x; p; d}; H; x; s/\n/\t/; s/^>.*\t//; h; $p'
原始问题的bash解决方案(即不带“标题”):
#/bin/bash
text=[]
i=0
exec原始问题的bash解决方案(即不带“标题”):
#/bin/bash
text=[]
i=0
exec我在sed中找不到一个简单的方法。不管怎样,你只要改变一下就行了
RS变量和剪切换行符:
awk -v RS='> sq[0-9]' 'NR>1{gsub(/\n/,"");print}' file
我找不到一个简单的方法在sed中实现它。不管怎样,你只要改变一下就行了
RS变量和剪切换行符:
awk -v RS='> sq[0-9]' 'NR>1{gsub(/\n/,"");print}' file
@DW:您的代码片段似乎不起作用。我得到了“foooobartfooofooo\n quxquxquxquxbar\n quxxt>sq3\n fooobartfooo\n fooobartfooo”@DW:你的代码片段似乎不起作用。我得到了“fooooobartfooooo\n quxquxquxquxbar\n quxxt>sq3\n fooobartfooo\n fooobartfooo”