Excluindo uma string incorporada em um arquivo de texto com grep ou qualquer outra coisa via terminal

0

Eu tenho um arquivo de texto e gostaria de remover '/ d0 /' '/ d1 /' ... '/ d5 /' da cada linha de texto. Eu sei que posso ls os arquivos com '/ d * /'. Eu acho que é grep -vE '//d*// filename > filename Alternativamente, eu poderia criar o arquivo de texto de nomes de arquivos do servidor remoto via ls , mas adiciona a extensão para o nome do arquivo no arquivo de texto. Qualquer ajuda seria muito apreciada. Obrigado.

    
por Sabersimon 14.07.2015 / 18:10

1 resposta

1

Não faça

anycommand filename > filename

O shell processa o redirecionamento antes de iniciar o comando. O redirecionamento > file primeiro truncará o arquivo para que seu tamanho seja 0 bytes. Então, quando o comando é iniciado, ele tem um arquivo vazio para trabalhar.

O comando sponge do pacote moreutils existe para apenas este propósito:

anycommand filename | sponge filename

Para responder à sua pergunta, você vai querer usar sed para editar o seu arquivo

sed -i 's,/d[0-5]/,,' filename

O sinalizador -i do sed salvará as alterações no mesmo nome de arquivo.

    
por glenn jackman 14.07.2015 / 18:20