Existe o comando inverso de corte?

5

Primeira pergunta, então se o formato não estiver correto, desculpe!

Gosto de usar o comando cut no Linux com o sinalizador -c . No entanto, estou interessado em encontrar um comando que faça o inverso de cut . Essencialmente, dada a entrada:

drwxrwxrwx 2 root root 4096 4096 4 20:15 bin
drwxrwxrwx 2 root root 4096 4096 4 20:15 Desktop

Eu gostaria de ver tudo exceto “4096 4 20:15”. Aqui está a saída:

drwxrwxrwx 2 root root bin
drwxrwxrwx 2 root root Desktop

Eu quero ser capaz de literalmente cortar entre os caracteres xey, se isso fizer sentido.

Alguma ideia? Eu não posso imaginar que seria um script difícil de escrever, mas se já existe um comando para isso, eu adoraria usá-lo.

    
por Paul Hendricks 08.09.2013 / 18:20

1 resposta

7

Como outros apontaram, você não deve analisar a saída de ls . Supondo que você esteja usando ls apenas como exemplo e esteja analisando outra coisa, existem algumas maneiras de fazer o que você deseja:

  1. cut com -d e -f

    cut -d ' ' -f 1,2,3,4,9
    

    de man cut :

    -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter
    
    -f, --fields=LIST
          select only these fields;  also print any line
          that contains no delimiter  character,  unless
          the -s option is specified
    

    Especificamente para ls , isso provavelmente falhará, pois ls mudará a quantidade de espaço em branco entre campos consecutivos para torná-los mais alinhados. cut trata foo<space>bar e foo<space><space>bar de forma diferente.

  2. awk e suas variantes dividem cada linha de entrada em campos no espaço em branco, para que você possa dizer para imprimir apenas os campos desejados:

    awk '{print $1,$2,$3,$4,$9}'
    
  3. Perl

    perl -lane 'print "@F[0 .. 3,8]"'
    
por 08.09.2013 / 19:06