GNU/Linux >> Linux の 問題 >  >> Linux

複数のコマンドを同じ行に出力するための 3 つのトリック

2 つのコマンドを一度に出力するための 3 つのトリック 一列。通常、2 つのコマンドの出力は、Linux ターミナルではキャリッジ リターン で常に区切られます。

スクリプト作成における大きなハードルの 1 つは、要件に応じて出力を適切にフォーマットすることです。 Linux/Unix では、各コマンドはその出力を常に新しい行に stdout します。これは、コーダーが 2 つの出力、2 つの項、1 つの行に 2 つの変数 (たとえば CSV 形式) を必要とする多くの状況でハードルになります。この投稿では、2 つ以上のコマンドの出力を 1 行に表示する方法について説明します。

また読む :スクリプティング関連の投稿

通常、複数のコマンドを実行すると、出力が異なる行に表示されます:

# date ; hostname
Sat Dec 24 01:35:50 EDT 2016
testsrv2

# echo text1; echo text2; echo text3
text1
text2
text3

上記の例では、コマンドは行ごとに出力を持っています。以下のトリックを使用して、すべての出力を 1 行で達成します。

トリック 1:

翻訳機能の使用。 前述したように、各コマンド出力にはキャリッジ リターンが伴います。キャリッジ リターンをタブ文字で変換するため、2 つ以上のコマンドが 1 行に出力されます。

# (date; hostname) |tr '\n' '\t'
Sat Dec 24 01:36:22 EDT 2016    testsrv2

# (echo text1; echo text2; echo text3) |tr '\n' '\t'
text1   text2   text3

出力を変換機能にバイパスすることで、単一行の出力を実現しました。ここでは tr に指示しました すべてのキャリッジ リターンを変換する関数 (\n ) からタブ (\t ).

CSV 形式 (カンマ区切り値) で出力する場合は、タブをカンマに置き換えると取得できます。

# (date; hostname) |tr '\n' ','
Sat Dec 24 01:43:09 EDT 2016,testsrv2,

# (echo text1; echo text2; echo text3) |tr '\n' ','
text1,text2,text3,

すべてのコマンド出力が \n で終わることを示す 1 つの末尾のコンマを確認できます。したがって、, に置き換えられます。

トリック 2:

各コマンド出力を変数として定義する。 ここでは、各コマンドの出力を 1 つの変数に格納し、それらの変数を 1 行でエコーします。

# mydate=`date`

# myname=`hostname`

# echo $myname $mydate
testsrv2 Sat Dec 24 01:46:04 EDT 2016

ここでは、日付とホスト名コマンドの出力を mydate に保存しました および myname 変数。最後のコマンドでは、間にスペースを入れて両方の変数をエコーし​​ました。コマンド出力は、バッククォートを使用してコマンドを実行することで変数に格納できることに注意してください (インライン実行)!

トリック 3:

インライン実行出力をエコーする。 インライン実行、つまり、バックティックを使用して別のコマンド内でコマンドを実行します。このトリックを使用して、出力を 1 行でエコーします。

# echo "`date` `hostname`"
Sat Dec 24 01:50:36 EDT 2016 testsrv2

上記の例では、まず、コマンドを実行して出力を取得しました。しかし、これらの出力は echo コマンドに送られます。したがって、echo コマンドを stdout で 1 行にまとめます。

# echo "`echo text1` `echo text2` `echo text3`"
text1 text2 text3

各コマンドを個別の逆引用符で実行したことに注意してください。


Linux
  1. コマンドの出力をシェル変数に割り当てる方法は?

  2. 「最後の」コマンドの出力?

  3. シェルで`command`と$(command)を使用してコマンド出力を取得することの違いは何ですか?

  1. Lsコマンドの結果の補足を取得しますか?

  2. CentOS / RHEL :yum history コマンド出力で実行されたコマンドを表示する方法

  3. 同じターミナルで一度に複数のコマンドを並行して実行する

  1. コマンドラインでsortを使用してソートする

  2. $ _対!$。前のコマンドと出力リダイレクトの最後の引数?

  3. コマンド出力に改行を追加する