Como remover a vírgula (,) entre duas palavras usando o Bash

1

Como remover a vírgula (,) entre duas palavras?

Como posso colocar essas duas palavras em duas linhas diferentes?

Esta é minha opinião:

ent0
ent4
ent1,ent5
ent2,ent6
ent3,ent7
ent29,ent30
    
por Naveen 08.08.2017 / 10:30

7 respostas

11

tr ',' '\n'

substituiria todos os , s no seu arquivo de entrada por quebras de linha, parece que é o que você deseja.

    
por 08.08.2017 / 10:33
5

Use tr :

$  tr ',' '\n' < FILE
ent0
ent4
ent1
ent5
ent2
ent6
ent3
ent7
ent29
ent30
    
por 08.08.2017 / 10:33
4

No caso de haver espaços ou outros caracteres em branco ao redor da solução de vírgula - sed :

sed 's/[[:blank:]]*,[[:blank:]]*/\
/g' file

Com algumas implementações de sed , você pode substituir o \<newline> por \n .

    
por 08.08.2017 / 10:38
3

Usando bash :

#!/bin/bash
while IFS='' read -r line; do 
    echo "${line//,/$'\n'}";
done <infile.txt

ou sed

sed -e $'s/,/\\n/g' infile.txt 

ou

sed 's/,/\
/g' infile.txt 
    
por 08.08.2017 / 11:35
1

Você pode usar cut da seguinte forma:

Não sei de onde vêm os seus dados. Mas tenho certeza que você pode enviar suas informações para cut :

cat yourfile.data | cut -d, --output-delimiter ' ' -f 1,2

como por man cut

...
-d, --delimiter=DELIM
       use DELIM instead of TAB for field delimiter
--output-delimiter=STRING
       use STRING as the output delimiter the default is to use the input delimiter
-f, --fields=LIST
       select only these fields;  also print any line that contains no delimiter character, unless the -s option is specified
...

Mas, se você precisar adicionar mais lógica, eu recomendo que você use sed como @RomanPerekhrest disse. Você terá uma maneira mais flexível de analisar seus dados com poderosas expressões regulares. Na minha opinião, a melhor expressão regular para fazer isso seria:

'/^\s*\([^,]\+\)\s*,\s*([^,]\+\)\s*$/'

~ 0 ou mais espaços seguidos de qualquer coisa exceto vírgula, seguidos de 0 ou mais espaços, vírgula, 0 ou mais espaços seguidos de qualquer coisa exceto vírgula, seguidos de 0 ou mais espaços.

    
por 08.08.2017 / 17:07
0

Caso você queira manter a estrutura da coluna, veja como receber somente aspas por espaços.

No bash:

while IFS=, read -r field1 field2; do
    printf "%s %s\n" "$field1" "$field2"
done < test.txt

Referência: link

    
por 08.08.2017 / 17:04
0

Com o uso de tr (no caso específico que você forneceu), você pode traduzir o comma para new line

user@server[/test]> cat text.txt
ent0
ent4
ent1,ent5
ent2,ent6
ent3,ent7
ent29,ent30
user@server[/test]> cat text.txt| tr "," "\n"
ent0
ent4
ent1
ent5
ent2
ent6
ent3
ent7
ent29
ent30
    
por 10.08.2017 / 10:33