Como obtenho o comando 'tr' para ignorar a nova linha?

2

Eu quero substituir vários espaços por um único espaço. Estou usando tr para fazer isso. Mas também está substituindo uma nova linha por um espaço. Como posso evitar isso?

Código:

tr -s [:space:] ' '

Entrada:

He  llo
Wor  ld
how  are  you

Saída exigida:

He llo
Wor ld
how are you

Minha saída:

He llo Wor ld how are you
    
por rishiag 30.08.2014 / 13:43

2 respostas

7

:space: corresponde ao espaço em branco horizontal e vertical. Use :blank: para corresponder apenas ao espaço em branco horizontal.

    
por Mike Scott 30.08.2014 / 13:49
1

Você pode usar seu próprio método:
use apenas tr -s [:space:] sem ' ' no final

ou

Você pode usar um destes comandos:

Com o comando tr :

tr -s ' '             < input.txt > output.txt
tr -s '[:blank:]'     < input.txt > output.txt
tr -s \               < input.txt > output.txt


Com o comando sed :

sed 's/  */ /g'              < input.txt > output.txt
sed 's/ \{1,\}/ /g'          < input.txt > output.txt
sed 's/ \+ / /g'             < input.txt > output.txt
sed -e "s/[[:space:]]\+/ /g" < input.txt > output.txt


com o comando awk :

awk '{$0=tolower($0);$1=$1}1' < input.txt > output.txt
awk '$1=$1'                   < input.txt > output.txt
awk '{$1=$1}1' OFS=" "        < input.txt > output.txt


A saída de cada um destes comandos é tão sensata como segue:

He llo
Wor ld
how are you

Nota: seu arquivo é salvo como nome "input.txt" e a saída é gravada em um novo arquivo chamado "output.txt".     
por αғsнιη 30.08.2014 / 14:24