bash / sed / awk / etc删除所有其他换行符

一个bash命令输出这个:

Runtime Name: vmhba2:C0:T3:L14 Group State: active Runtime Name: vmhba3:C0:T0:L14 Group State: active unoptimized Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized Runtime Name: vmhba3:C0:T3:L14 Group State: active Runtime Name: vmhba2:C0:T2:L14 Group State: active 

我想pipe它到一些东西,使其看起来像这样:

 Runtime Name: vmhba2:C0:T1:L14 Group State: active Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized Runtime Name: vmhba2:C0:T2:L14 Group State: active [...] 

即删除所有其他换行符

我试过... |tr "\nGroup" " "但是它删除了所有的换行符,并且还有其他一些字母。 谢谢

    现在不能testing,但是

     ... | paste - - 

    应该这样做

    一种可能性是:

     awk 'ORS=NR%2?" ":"\n"' 

    如果行号可以被2整除,则以新行结束,否则以空格结束。

    (testing:CentOS 6,GNU Awk 3.1.7)

    使用sed(请参阅解释 ):

     sed ':a;N;$!ba;s/\nGroup/ Group/g' 

    进一步阅读:

    • 删除新的行字符

    如果你想使用sed ,没有理由把整个文件读入内存。 你可以像这样合并每一行:

     sed 'N;s/\n/ /' inputfile 

    使用任何你喜欢的angular色而不是空格。

    这是使用awk的另一种方法:

     awk '{printf "%s", $0; if (getline) print " " $0; else printf "\n"}' inputfile 

    if/else处理文件中有奇数行的情况。 没有它,奇数的最后一行会打印两次。 否则,为了比较,你可以这样做:

     awk '{printf "%s", $0; getline; print " " $0}' 

    这在Linux上适用于我:

     ... | tr "\\n" " " 

    这将replace换行符的空白空间; 你必须逃避换行符才能正常工作。

    在bash中:

     ... | while read l1; do read l2; echo "$l1 $l2"; done 

    awk最习惯的做法如下:

     awk 'ORS=NR%2?FS:RS' file 

    它输出:

     Runtime Name: vmhba2:C0:T3:L14 Group State: active Runtime Name: vmhba3:C0:T0:L14 Group State: active unoptimized Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized Runtime Name: vmhba3:C0:T3:L14 Group State: active Runtime Name: vmhba2:C0:T2:L14 Group State: active 

    为了解释它,我们需要定义每个内置variables:

    • RSlogging分离器。 默认为\n (换行)。
    • ORS输出logging分隔符。 默认为\n (换行)。
    • FS字段分隔符。 默认为 (空间)。
    • NRlogging数。

    由于默认logging分隔符是新行,因此默认情况下,logging是一行。

    NR%2NR/2的模量,因此它可以是010表示偶数行, 1表示奇数行。

    var=condition?condition_if_true:condition_if_false是三元运算符。

    一起说, ORS=NR%2?FS:RS我们正在定义输出logging分隔符:

    • 如果logging的数目是2k + 1的格式,即偶数行,则输出logging分隔符被设置为FS ,即空格。
    • 如果logging的数量在表格2k ,即在奇数行上,则输出logging分隔符被设置为RS ,即新的行。

    这样,奇数行以空格结束,然后与下一行结合。 在那一行之后,打印一个新行。

    更多信息在习语awk 。

    如果Perl是一个选项:

    perl -pe 's/\n/ / if $. % 2 == 1' file

    s/\n/ /用空格replace换行符
    $. 是行号

    如何使用grep

     .. | grep -v '^Group State'