用 awk 或 sed 连接两行

da4*_*da4 2 bash awk sed macos

如果我有:

foo  
bar
Run Code Online (Sandbox Code Playgroud)

..我想awk/sed这个:

foo-bar
Run Code Online (Sandbox Code Playgroud)

..什么是语法?

我正在尝试在 OS X 10.6.x 上使用 System Profiler:

system_profiler SPMemoryDataType | awk '/Type/ {print $2} /Speed/ {print $2}'
Run Code Online (Sandbox Code Playgroud)

输出类型速度(即DDR-1067)。还没有想出如何使用printprintf尚未弄清楚如何做到这一点,可能会尝试grep改为..

slh*_*hck 6

tr

tr '\n' '-'
Run Code Online (Sandbox Code Playgroud)

这样就够了吗?这将用逗号替换每个换行符。


sed

一个更漂亮的解决方案使用sed

sed -e N -e 's/\n/-/'
Run Code Online (Sandbox Code Playgroud)

N根据手册页追加换行到模式空间:

[2addr]N

将输入的下一行附加到模式空间,使用嵌入的换行符将附加材料与原始内容分开。请注意,当前行号会发生变化。


bash

实际上,bash 可以做tr可以做的事情。只是为了完整性:

while read l; do echo -n "$l-"; done
Run Code Online (Sandbox Code Playgroud)

这是关于堆栈溢出的类似问题:SED:如何替换换行符 (\n)?