Converte o conteúdo do arquivo em minúscula e armazena o resultado no mesmo arquivo [duplicado]

2

Eu uso o seguinte comando para converter o conteúdo do meu arquivo de entrada para minúsculas

tr A-Z a-z < input > output 

Este comando funciona bem.

Mas quando tento armazenar a saída no próprio arquivo de entrada, não está funcionando. O arquivo de entrada está vazio após a execução do comando. Por quê?

 tr A-Z a-z < input > input 
    
por jophab 21.01.2017 / 05:06

2 respostas

3

But when I try to store the output in input file itself, it is not working. The input file is empty after executing the command. Why?

Como o > input faz com que o shell trunque o arquivo antes que o comando tr seja executado. Incidentalmente, você pode contornar isso com o manuseio do descritor mais avançado em Bash :

exec 8<>input
exec 9<>input
tr '[A-Z]' '[a-z]' <&8 >&9

O exec #<>file abre um arquivo no descritor # no modo de leitura-gravação sem truncar.

    
por 21.01.2017 / 05:25
8

Se você tem o GNU sed , você pode usar

sed -i 's/.*/\L&/' input
  • -i modificar arquivo no lugar
  • s/old/new/ replace old com new
  • .* quaisquer caracteres em cada linha
  • \L minúsculas
  • & o padrão correspondente
por 21.01.2017 / 05:31