我已经执行了以下命令
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
我已经尝试过sed
,tr
但没有成功。
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
读取第二行(来自) ,您仍然可以这样做date
N
将要在它们之间放置一个换行符):
$ ( 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 将单个“@”替换为“@@”