Clarificação do comando do Linux

0

ls -l | grep -v '^d' | sort -g -r -k 5 | head -2 : usei este comando para escrever em um arquivo de texto.

Eu pesquisei um pouco on-line e acho que esses comandos significam isso:

  1. grep : uma pesquisa que pesquisa um padrão específico em uma string

  2. -v : uma opção para o grep que diz para encontrar e exibir todas as linhas que não correspondem a

  3. '' : não sabe ao certo quais são as aspas simples para

  4. ^d : o cursor significa o início de uma linha e o d é o padrão que o grep está procurando. Isso funciona ao usar ls -l .

  5. sort classifica numericamente o conteúdo de um arquivo de texto

  6. -g compara de acordo com o valor numérico não tem certeza do que isso significa exatamente

  7. -r inverte os resultados da comparação. Isso faria mais sentido se eu soubesse que o objetivo da comparação era para.

  8. -k 5 inicia uma chave em POS1 - não sabe o que isso significa, significa que algo acontecerá no 5º caractere na primeira linha do meu arquivo de texto ?

  9. head -2 exibe as duas primeiras linhas do meu arquivo de texto.

Alguém poderia ajudar a esclarecer as partes sobre as quais não tenho certeza?

    
por whatwhatwhat 11.02.2016 / 06:21

2 respostas

3

Você tem a maioria dos detalhes técnicos, mas acho que está perdendo a semântica da coisa toda.

As aspas simples em '^d' mantêm qualquer shell executado por esse pipeline de tratar caracteres na expressão regular (que é '^d' ) como "especial". Por exemplo, $ é a expressão regular que significa "fim de linha". Os shells também usam $ para marcar o próximo token como uma variável do shell, cujo valor deve ser interpolado na string. O ^ é um sinônimo antigo para | , o stdout do cano do lado esquerdo em stdin do lado direito. As citações únicas mantêm ^ de tratamento especial.

A semântica não deve passar nenhuma linha de ls -l output marcada como diretórios. ls -l coloca um 'd' como o primeiro caractere de qualquer linha pertencente a um diretório.

A opção -g para sort faz com que o comando procure representações de números no campo-chave e classifique de acordo com o valor numérico, não como sequências. A ordem de classificação padrão é menor para a maior, portanto, a opção -r faz com que ela seja classificada de maior para menor. O -k 5 diz para usar o campo # 5 como o campo-chave. sort usa caracteres de espaço em branco (espaços em branco, tabulações, etc.) para dividir uma linha de texto em "campos" por padrão. Na minha caixa Arch Linux, o 5º campo separado por espaço em branco de ls -l é o tamanho do arquivo em bytes.

Semântica aqui está classificando arquivos por tamanho em bytes, maior primeiro.

Você está classificando arquivos (não diretórios) por tamanho em bytes e colocando as informações sobre os dois maiores arquivos no arquivo de texto.

Editorial, é geralmente considerado de má forma para analisar a saída de ls ; veja Por que você não deve analisar a saída de ls (1) . Historicamente, ls tinha formatos diferentes em máquinas diferentes, e um script que assumia, digamos que o tamanho do arquivo fosse o campo 5, daria problemas difíceis de entender em outra máquina. Então cuidado com isso.

    
por 11.02.2016 / 06:38
0

Aspas simples '' são usadas para indicar o início e o fim dos caracteres.

O sinalizador

-g na comparação de classificação de acordo com o valor numérico geral.

A opção

-r faz com que a saída seja classificada do maior para o menor, pois a saída padrão de classificação é menor para a maior.

A opção -k é usada se quisermos classificar a coluna ou posição da palavra em linhas de arquivo de texto.

    
por 11.02.2016 / 07:49