Como eu fiz isso? - Conteúdo do arquivo removido!

1

em primeiro lugar, obrigado por sua contribuição para este fórum! Eu mudei para o Ubuntu alguns meses atrás por razões de trabalho e estas páginas são uma grande ajuda!

Agora, chegue ao ponto: Eu estava tentando contar um padrão específico em um arquivo de texto: grep -c [padrão] [nome do arquivo] Agora: o padrão era: sinal "maior que", ou seja: > assim, o comando que dei foi: grep -c > [nome do arquivo] Eu recebi esta mensagem: Uso: grep [OPTION] ... PATTERN [FILE] ... Tente "grep --help" para mais informações.

Mas agora o arquivo de texto estava vazio! (felizmente eu tive um backup ...). Por quê? Eu estraguei alguma operação anterior ou foi o último comando que dei? Eu estou apenas tentando entender isso.

    
por Max 14.05.2013 / 20:28

2 respostas

2

A resposta anterior é tecnicamente precisa, mas acho que está contornando o conhecimento geral do usuário sobre o que eles estavam tentando fazer. Vamos nos concentrar no que você fez de errado, e então reescrever o comando para que você possa encontrar as entradas de ">" no arquivo, em vez disso.

(Explicação de porque o arquivo foi descartado) Se você usa > no final de uma linha (tente "ls > directory.txt") você apagará o diretório.txt [se existir] e inserirá os resultados do comando. Se você usa > & gt ;, basta anexar (adiciona ao final) qualquer arquivo existente. "grep" não percebeu que você estava procurando por ">" em vez de querer enviar a saída para o arquivo que você pretendia pesquisar. Como resultado, simplesmente não despejou nada no arquivo em que você tinha dados.

No seu caso, você provavelmente quis usar isso:

grep -c -- '>' filename.ext

Deixe-nos saber se isso resolve o seu problema!

    
por gravitymixes 14.05.2013 / 20:39
3

Você está analisando o redirecionamento de saída (Bash) . Ao redirecionar a saída regular 'stdout' para filename , você está sobrescrevendo-a. Saída de erro, 'stderr' ainda é mostrado (no seu terminal por padrão), no entanto. Esse foi o texto de ajuda que você viu.

Para realmente usar o caractere > no grep como um caractere para combinar, escape no seu shell (Bash), por exemplo

grep -c \> myfile

Colocando entre aspas, '>' também funcionará.

Um snippet do link acima explica o redirecionamento de maneira mais geral:

COMMAND_OUTPUT >
  # Redirect stdout to a file.
  # Creates the file if not present, otherwise overwrites it.

  ls -lR > dir-tree.list
  # Creates a file containing a listing of the directory tree.
[..]
1>filename
  # Redirect stdout to file "filename."
1>>filename
  # Redirect and append stdout to file "filename."
2>filename
  # Redirect stderr to file "filename."
2>>filename
  # Redirect and append stderr to file "filename."
&>filename
  # Redirect both stdout and stderr to file "filename."
    
por gertvdijk 14.05.2013 / 20:31