Como apagar apenas o espaço anterior em um arquivo de texto?

2

Eu tenho um arquivo de texto que tem um espaço antes da linha. Como faço para excluí-lo usando tr (ou o comando correto)?

Por exemplo, eu tenho isso:

 Text

Eu gostaria disso:

Text   

Mas, como faço isso para um arquivo de texto de 200 linhas?

Atualmente tenho este canal:

cat file.txt | tr -s " " | tr -d "," 

Os outros comandos tr são para remover outros aspectos dos arquivos de texto.

    
por gbrooks 05.02.2014 / 21:12

3 respostas

5

Isso deve fazer o trabalho:

sed -e 's/^ //' -e 's/,//g' file.txt

O comando sed (editor de fluxo) recebe dois comandos para executar sequencialmente, ambos os comandos substituem algo por nada, isto é, excluem uma parte da entrada.

O primeiro remove espaços imediatamente após o início de uma linha, anotou ^ , o segundo remove as vírgulas e tem o mesmo efeito que o comando tr -d "," .

Obrigado a minerz029 por indiretamente me lembrar que eu estava perdendo o 'g' já que minha primeira resposta foi apenas remover a primeira vírgula encontrada em cada linha.

    
por jlliagre 05.02.2014 / 21:14
0
sed -e 's/^ //g' -e 's/,//g' file.txt

Explicação:

O primeiro script ( s/^ //g ) é substituir todo o espaço inicial por nada (excluir).
O segundo script ( s/,//g ) é substituir todas as vírgulas por nada (delete).

    
por kiri 05.02.2014 / 21:33
0

O Bash tem uma maneira de usar while IFS= read -r ; do . . . done < input.txt structure, para imprimir o conteúdo exato do arquivo, mas uma das características peculiares aqui é que, se você omitir IFS= , os espaços iniciais não serão lidos. Assim, podemos fazer o seguinte:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt                                                         
Text

E para substituir o texto do arquivo original, pode-se modificar o comando da seguinte forma:

$ cat input.txt
 Text
$ while read -r line; do printf "%s\n" "$line"; done < input.txt > temp.txt ; mv temp.txt input.txt                      
$ cat input.txt
Text

Também podemos usar a expansão de parâmetros para excluir vírgulas também

$ cat input.txt                                                                                                          
 Text, text,
$ while read -r line; do printf "%s\n" "${line//,}"; done < input.txt                                                    
Text text

tr -s" " também pode ser simulado através da modificação de printf ligeiramente

$ cat input.txt                                                                                                          
 Text,     text,
$ while read -r line; do printf "%s " ${line//,};printf "\n"; done < input.txt                                           
Text text 
    
por Sergiy Kolodyazhnyy 04.02.2017 / 20:10