次のコマンドを実行しました。
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
。 2つの文字列があり、それを追加の形式で出力したいと思います。まさにprintf
。
$ printf "%s @@ %s\n" "$(cat /proc/loadavg)" "$(date)"
修正したtr
ため、試行は無効です。tr
数値、言葉ではありません。ただし、これを使用して改行文字を1文字に置き換えることができます。
$ ( cat /proc/loadavg; date ) | tr '\n' '@'
...しかし、必要な機能を正しく実行できません。
sed
入力から改行文字が削除されたため、あなたの試みは機能しませんsed
(つまり、sed -n '/\n/p' inputfile
何も印刷されません)。
最初の行の編集中に編集コマンドを使用して2番目の行を読み取った場合でも、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/ @@ /'
|
まず、パイプは2つのコマンドではなく動作するため、試行は機能しませんdate
。この問題を解決するには、cat ... && date
サブシェルで実行し、サブシェルのstdout
。
tr '\n' ' @@ '
1文字を複数の文字に置き換えることができないため、機能しません。
一度に1行しか表示できないため、機能しませんsed 's/\n/ @@ /g'
。sed
改行を表示するには、2行の入力を同じバッファにマージする必要があります。これがN
上記の作業です。
答え4
ただ何か他の理由で...
(cat /proc/loadavg && date) | paste -d@ - - | sed 's/@/ @@ /'
paste -d@ - -
「@」を挟んで2行を並べて貼り付けます。その後、sedは単一の「@」を「@@」に置き換えます。