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

car*_*tor 47 bash awk sed

一个 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
Run Code Online (Sandbox Code Playgroud)

我想把它用管道输送到某个东西上,使它看起来像这样:

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
[...]
Run Code Online (Sandbox Code Playgroud)

即删除所有其他换行符

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

gle*_*man 94

现在无法测试,但是

... | paste - - 
Run Code Online (Sandbox Code Playgroud)

应该做

  • `paste` 用于连接文件中的相应行:`paste file1 file2 file3 ...`。如果“文件”参数之一是“-”,则从标准输入读取行。如果有 2 个“-”参数,则 paste 从 stdin 中取出 2 行。等等。请参阅 [手册页](http://man.cx/paste)。 (9认同)
  • +1 - 有效且优雅。(它会在两行之间放置一个制表符 - `paste -d ' ' - -` 将在需要时添加一个空格) (7认同)
  • 你能解释一下命令是如何工作的吗?为什么有两个`-`?谢谢 (5认同)

cyb*_*x86 11

一种可能性是:

awk 'ORS=NR%2?" ":"\n"'
Run Code Online (Sandbox Code Playgroud)

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

(测试:CentOS 6,GNU Awk 3.1.7)

使用 sed(见解释):

sed ':a;N;$!ba;s/\nGroup/ Group/g'
Run Code Online (Sandbox Code Playgroud)

进一步阅读:


Den*_*son 8

如果您想使用sed,则没有理由将整个文件读入内存。您可以像这样合并所有其他行:

sed 'N;s/\n/ /' inputfile
Run Code Online (Sandbox Code Playgroud)

使用您想要的任何字符而不是空格。

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

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

所述if/else手柄其中存在奇数个文件中的行的情况下。没有它,奇怪的最后一行会打印两次。否则,为了比较,你可以这样做:

awk '{printf "%s", $0; getline; print " " $0}'
Run Code Online (Sandbox Code Playgroud)