Qual é o propósito desses caracteres especiais no comando sed? [fechadas]

3

Eu encontrei este comando bash que cria uma árvore de diretórios na sua janela do console. Eu acho isso bastante útil, mas eu realmente não entendo como todos os personagens especiais funcionam. Alguém poderia ajudar a dividir isso para mim?

alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

Os dois primeiros são bastante simples de entender, isso é criar um alias no bash que lista recursivamente os arquivos e pastas abaixo do diretório atual.

1. alias tree="" 
2. ls -R

Mas depois disso eu estou praticamente perdido. Eu entendo que ele está canalizando o resto dos comandos através do grep e do sed, mas eu não entendo o resto ou até mesmo o que esses modificadores são chamados.

    
por P0LYmath 24.10.2014 / 02:51

1 resposta

4
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"
  • ls -R : listar subdiretórios recursivamente
  • grep ":$" : grep apenas para linhas com : no final da linha
  • sed -e 's/:$//' : remova : no final da linha
  • -e 's/[^-][^\/]*\//--/g' : substitua todos os componentes do caminho, exceto o último dir com -- . Para ser preciso, substitua qualquer caractere, exceto - seguido por qualquer caractere, exceto / repetido zero ou mais vezes e, em seguida, seguido por / .
  • -e 's/^/ /' : adicione 3 espaços no início da linha
  • -e 's/-/|/' : substitua primeiro - por |

Existem muitos "problemas" com este fragmento começando com a análise do comando ls , mas deixando isso de lado, você pode reescrever sed part de maneira mais compacta:

ls -R | grep ":$" | sed -e 's/:$//;s/[^-][^\/]*\//--/g;s/^/   /;s/-/|/'
    
por 24.10.2014 / 03:07