Altera a saída de todos os comandos

1

Gostaria de saber se existe alguma maneira de alterar a saída de todos os comandos que executo no terminal. O objetivo é tornar a saída formatada para o meu howdown de markdown.

Por exemplo,

ls -la .*z
#>-rw-r--r--  1 hologos  staff   3580 26 zář 14:22 .zconfig
#>-rw-------  1 hologos  staff  28927 17 říj 15:59 .zhistory
#>-rw-r--r--  1 hologos  staff   5600 30 zář 08:03 .zshrc

O "# >" é o que eu quero que toda linha de saída comece com isso. Eu uso primariamente o zsh.

Obrigado.

    
por Hologos 17.10.2014 / 16:14

2 respostas

2

Eu faria algo como

  command | sed -e 's/^/line-prefix /'

exemplo

$ ls -la m* | sed -e 's/^/#> /'
#> -rwxr-xr-x 1 root root 76080 Aug 11  2011 mailstats
#> -r-xr-xr-x 1 root root 92824 Aug 11  2011 makemap
#> -rwxr-xr-- 1 root root 12389 Jul 22  2011 makewhatis
#> -rwxr-xr-x 1 root root 11520 Mar  6  2011 matchpathcon
#> -rwxr-xr-x 1 root root 56600 May 18  2011 mcelog
#> lrwxrwxrwx 1 root root    15 Mar 18  2011 mkdict -> cracklib-format
#> -rwxr-xr-x 1 root root  9600 Jul 22  2011 mklost+found
#> -rwxr-xr-x 1 root root 10176 Jan  6  2007 mksock
#> -rwxr-xr-x 1 root root  4409 Jan  7  2007 modeline2fb
#> -rwxr-xr-x 1 root root 23787 Jul 22  2011 mountstats
#> -rwxr-xr-x 1 root root 58032 Jan  7  2007 mtr

Você também pode aplicar isso a um shell para que seja feito automaticamente

$ ksh | sed -e 's/^/#> /'
$ ls m*
#> mailstats
#> makemap
#> makewhatis
#> matchpathcon
#> mcelog
#> mkdict
#> mklost+found
#> mksock
#> modeline2fb
#> mountstats
#> mtr

Provavelmente, existem algumas desvantagens / dicas, tome cuidado com isso.

Uma abordagem diferente é executar script (consulte man script ) e, em seguida, usar seu editor favorito (ou um pequeno script perl / awk / etc) para torná-lo amigável à marcação - No vim eu faria algo como :%s/^/#> / para corrigir todas as linhas de uma só vez. Então eu colocaria os cabeçalhos markdown etc.

    
por 17.10.2014 / 16:29
1
IFS=$'\n';for line in 'ls -la .*z';do echo "#>$line";done

ele percorrerá a saída do comando ( ls -la .*z ) e exibirá o resultado na tela, adicionando #> a cada linha

ps:

a parte IFS é para definir o delimitador como nova linha em vez de espaço em branco

    
por 17.10.2014 / 16:20