web-dev-qa-db-ja.com

コマンド出力を右にシフト

ログイン端末に役立つ情報を提供するために.bashrcファイルを作成していて、calコマンド(ナイスコマンド)を実行するように指示しているとします。 .bashrc「ウェルカムメッセージ」の残りのフォーマットに一致するように、作成されたカレンダーを右にシフトするにはどうすればよいですか?

7
theStandard
cal | sed 's/^/     /'

説明

  • cal |:calの出力をパイプに…
  • sed 's/^/ /' sed。行の始まり^を検索し、スペースで置き換えます。ここでスペースの数を変更して、必要なフォーマットに一致させることができます。

編集する

calから当日のハイライトを保持するには、パイプに「色」(ハイライト)を出力するように指示する必要があります。 man calから

   --color [when]
          Colorize output.  The when can be never, auto, or always.  Never will turn off coloriz‐
          ing  in  all  situations.  Auto is default, and it will make colorizing to be in use if
          output is done to terminal.  Always will allow colors to be outputed when  cal  outputs
          to pipe, or is called from a script.

N.B.マニュアルにタイプミスがあるようです。機能させるには=が必要でした。したがって、最後のコマンドは

cal --color=always | sed 's/^/     /'
9
Sparhawk

pasteの場合:

cal | paste /dev/null -
5

sedを使用できます:

cal | sed -e 's/^/    /'

上記は、先頭に挿入することにより、カレンダーを4つのスペースでインデントします(^)すべての行。必要に応じてインデントを変更したり、他の出力を追加したりできます。

どの端末でも完全に右揃えにしたい場合は、 printf および stty をより醜いループで使用できます。

read height width < <(stty size)
cal | while read line ; do printf "%${width}s" "$line" ; done

stty sizeは非標準ですが広くサポートされています)

4
Michael Homer
cal | nl -bn

...nlは常に、入力行に追加するインデントと等しくなるように、番号のない入力行をインデントするため、機能します。デフォルトでは、nlは入力の-headerまたは-footerセクションに番号を付けず、-body行のみに番号を付けます。 notに-body行の番号を付けるように指示すると、番号はまったく付けられず、すべての入力行にインデントが挿入されるだけです。

-widthおよび-separatorスイッチを使用して、インデントのサイズを調整します。


cal; cal | nl -bn

    December 2015   
Su Mo Tu We Th Fr Sa
       1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 31       

           December 2015   
       Su Mo Tu We Th Fr Sa
              1  2  3  4  5 
        6  7  8  9 10 11 12 
       13 14 15 16 17 18 19 
       20 21 22 23 24 25 26 
       27 28 29 30 31       

もあります:

cal | pr -to[num]

...ここで[num]は、各行の先頭に挿入するスペースの数です。 prは通常pageごとに66行を出力しますが、-tはヘッダー/フッターの挿入を省略し、入力を出力に出力するように指示します。次に、-offsetマージンスイッチを使用して、各出力行の先頭の[num]で要求された数のスペースを挿入します。

cal; cal | pr -to10

    December 2015   
Su Mo Tu We Th Fr Sa
       1  2  3  4  5 
 6  7  8  9 10 11 12 
13 14 15 16 17 18 19 
20 21 22 23 24 25 26 
27 28 29 30 31       

              December 2015   
          Su Mo Tu We Th Fr Sa
                 1  2  3  4  5 
           6  7  8  9 10 11 12 
          13 14 15 16 17 18 19 
          20 21 22 23 24 25 26 
          27 28 29 30 31       
3
mikeserv

exを使用した例を次に示します。

ex +"%norm 20I " +%p -scq! <(cal)

20を必要な数のスペースに変更します。 "%norm 20I "を使用すると、多くのスペースを置換して繰り返すよりも効率的です-"%s/^/ /"

0
kenorb