如何使用分隔符将两行换行为单行

如何使用分隔符将两行换行为单行

我已经执行了以下命令

cat /proc/loadavg && date

实际结果:

0.00 0.00 0.00 1/803 26256
Fri Aug 26 09:00:56 EEST 2016

预期结果:

0.00 0.00 0.00 1/803 26256 @@ Fri Aug 26 09:00:56 EEST 2016

我已经尝试过sedtr但没有成功。

cat /proc/loadavg && date | sed 's/\n/ @@ /g'

cat /proc/loadavg && date | tr '\n' ' @@ '

知道吗,我缺少什么?

答案1

你最好的选择是使用printf.您有两个字符串,并且希望以一些附加格式输出它们。正是如此printf

$ printf "%s @@ %s\n" "$(cat /proc/loadavg)" "$(date)"

您的tr尝试无效,因为tr修改了人物,不是言语。不过,您可以使用它用一个字符替换换行符:

$ ( cat /proc/loadavg; date ) | tr '\n' '@'

...但它并不能完全满足您的需要。

您的sed尝试不起作用,因为换行符已从输入中删除sed(即sed -n '/\n/p' inputfile永远不会打印任何内容)。

如果您在编辑第一行(从)时使用编辑命令sed读取第二行(来自) ,您仍然可以这样做dateN将要在它们之间放置一个换行符):

$ ( cat /proc/loadavg; date ) | sed 'N;s/\n/ @@ /'

...但我个人更喜欢这个printf解决方案。

答案2

你可以这样做:

echo `cat /proc/loadavg` @@ `date`

答案3

像这样:

( cat /proc/loadavg && date ) | sed 'N; s/\n/ @@ /'

首先,您的尝试不起作用,因为管道|仅适用于date,而不适用于两个命令。要解决这个问题,您需要cat ... && date在子 shell 中运行,然后重定向子 shell 的stdout.

然后tr '\n' ' @@ '不起作用,因为您无法用多个字符替换一个字符。

并且sed 's/\n/ @@ /g'不起作用,因为sed一次只能看到一行。要让它看到换行符,您需要将两行输入合并到同一缓冲区中。这就是N上面所做的。

答案4

只是为了一些不一样的东西...

(cat /proc/loadavg && date) | paste -d@ - - | sed 's/@/ @@ /' 

paste -d@ - -并排粘贴两行,中间带有“@”。然后 sed 将单个“@”替换为“@@”

相关内容