Deslocando a saída do comando para a direita

6

Digamos que estou escrevendo um arquivo .bashrc para me fornecer algumas informações úteis em meus terminais de login e estou dizendo a ele para executar o comando cal (um bom). Como eu mudaria o calendário produzido à direita para corresponder à formatação do resto da minha .bashrc "mensagem de boas-vindas"?

    
por theStandard 03.08.2014 / 09:26

5 respostas

7
cal | sed 's/^/     /'

Explicação

  • cal | : canaliza a saída de cal para…
  • sed 's/^/ /' sed, que procurará o início das linhas ^ , substituindo por espaços. Você pode alterar o número de espaços aqui para corresponder à formatação necessária.

Editar

Para preservar o realce do dia atual de cal , você precisa dizer para a saída "cor" (destaque) para o tubo. De 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. parece haver um erro de digitação no manual; Eu precisava de um = para funcionar. Portanto, o comando final é

cal --color=always | sed 's/^/     /'
    
por 03.08.2014 / 09:43
4

Você pode usar sed :

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

O texto acima irá recuar o calendário em quatro espaços, inserindo-os no início ( ^ ) de cada linha. Você pode alterar o recuo conforme desejar ou adicionar outras peças de saída.

Se você quiser que ele esteja perfeitamente alinhado à direita em qualquer terminal, você pode usar printf e stty com um loop mais feio:

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

( stty size não é padrão, mas é amplamente suportado)

    
por 03.08.2014 / 09:42
4

com paste :

cal | paste /dev/null -
    
por 03.08.2014 / 09:51
3
cal | nl -bn

... funcionará porque nl sempre recua linhas de entrada que não é igual ao recuo que adicionaria às linhas de entrada. Por padrão, nl não contém -h eader ou -f ooter seções de entrada e apenas números -b ody lines. Se você também disser a ela n ot para o número -b ody lines, ela não será numerada e apenas insere o recuo em todas as linhas de entrada.

Use as opções -w idth e -s eparator para ajustar o tamanho do recuo.

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       

Existe também:

cal | pr -to[num]

... onde [num] é o número de espaços que você deseja inserir no início de cada linha. pr normalmente imprime 66 linhas por página , mas o -t diz para omitir suas inserções de cabeçalho / rodapé e apenas imprime a entrada na saída. A opção -o ffset margin é então usada para inserir tantos espaços quantos forem solicitados em [num] na cabeça de cada linha de saída:

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       
    
por 31.12.2015 / 03:41
0

Aqui está um exemplo usando ex :

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

Altere 20 para o número de espaços requeridos. Usar "%norm 20I " é mais eficiente do que repetir muitos espaços com substituição - "%s/^/ /" .

    
por 31.12.2015 / 00:35