行的其余部分空间

问题描述:

后转移到一个新行,如果我有以下几点:行的其余部分空间

>AB ABABABA 
>AC ACACACA 

怎么办我的空间后移的一切到一个新行即

>AB 
ABABABABA 
>AC 
ACACACACA 

我曾尝试:

cat file | sed 's/ /\n/g' 
cat file | tr ' ' '\n' 

但是我得到完全相同的输出。

**更新**

在检查使用更少和纳米的文件时,输出是使用cat不同。该文件包含一些不在cat中显示的终端转义字符,但数量较少。 (这是怎么发生的?)

这是一个可怕的错误发现,并且每个人都已经根据猫的输出发布了更正的答案。所以谢谢你的帮助。 MOD可以关闭这个吗?

+1

'sed's// \ n/g'file'应该可以工作 – anubhava

+0

@anubhava至少应该用'tr',至少包含测试数据。不过,有人可能想使用'$'\ n'作为换行符。 – andlrc

+0

奇怪的是 - 我已经试过这个(见问题),它不工作。我完全困惑! – brucezepplin

看来你需要更换(任何一种)的换行空间

perl -pe 's/\s+/\n/' data.txt 

这会在我的测试中产生所需的输出。 -p设置输入循环(打开文件或使用STDIN)并将$_设置为当前行。每次处理后还会打印$_

如果有多个空格,每个空格要被替换为\n,请添加/g修饰符。

如果有可能更多的是你还可以捕捉模式和替换它们

perl -pe 's/\s+(.*)/\n$1/' data.txt 

继在answer by glenn jackman观察和“更紧密”寻找它看来,第一个字上该行需要被复制到下一行。接着上面的修改为

perl -pe 's/^>(\S+)\K\s+/\n$1'; 

\Kpositive lookbehind的一种特殊形式,其断言该模式preceeds当前匹配的位置,但它摒弃之前的所有匹配(所以你不必捕捉并复制它们)。你可以找到它in perlre。没有它,>(\S+)将被消耗,因此它必须被复制回替换部分,如/>$1\n$1/

您是否试图将空间前的内容移动到下一行?

正如>A BC变为:

>A 
ABC 

那么可以用sed这样的:

$ sed 'h;s/^>\([^ ]*\) /\1/;x;s/ .*/ /;G' file 
>AB 
ABABABABA 
>AC 
ACACACACA 

击穿:

h;        # Copy pattern space to hold buffer 
    s/^>\([^ ]*\) /\1/;    # Convert >A BC to ABC 
        x;   # eXchange hold buffer and pattern space 
         s/ .*/ /; # Remove everything after, but including the 
            # first space: >A BC -> >A 
           G # Append hold buffer to pattern space 
+0

绝对只是一个单一的空间 – brucezepplin

+0

这是一个欺骗sed! –

+1

这确实是'*** ed up sed',我们可能不同意'*代表:-)。重点是什么?它更简单,更高效,更便携,更容易扩展,并以其他方式更好地在awk中做这样的事情。让所有神秘的sed构造死去,坚持它的优点 - 's/x/y /'。 –

sed用于简单替换个别行,即全部。为别的,你应该使用AWK,例如:

$ awk '{print $1 ORS substr($1,2) $2}' file 
>AB 
ABABABABA 
>AC 
ACACACACA 

更加紧密,它看起来像要重复下一行的第一个字展望:改造这个

>foo bar 
>baz qux 

这个

>foo 
foobar 
>baz 
bazqux 

如果这是真的,你可以做

sed -r 's/^>([^ ]+) />\1\n\1/' file # or 
perl -pe 's/^>(\S+) />$1\n$1/' file 
+0

'perl -pe's/^>(\ S +)\ K \ s +/\ n $ 1 /'file' – Borodin

+0

POSIX sed是否在替换中指定'\ n',是不是该实现特定的?尽管POSIX sed在搜索部分指定了'\ n'。应该考虑使用'sed -E',因为它受Free BSD和GNU支持,而'sed -r'只是GNU。 – andlrc

+0

您计划部署您的脚本有多少个不同的操作系统?如果你坚持一个单一的操作系统,IMO,POSIX合规性是有限的。 –