Apagar o ultimo caracter da linha usando sed

1. Apagar o ultimo caracter da linha usando sed

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 10/09/2019 - 13:35h

Boa tade,

Galera estou com dificuldade de apagar o ultimo caracter de todas as linhas do meu arquivo, o caracter é uma aspas dupla estou tentando com o sed.

DIA,"OPERADORA","TIPO_TRAFEGO","TIPO_ASSINANTE","TIPO_SERVICO","TIPO_TARIFACAO","RATING_GROUP","CLASSIFICA_TRAFEGO","DESCARTE_MEDIACAO","SUM(QUANTIDADE)","SUM(VOLUME)""
09/06/19,"PORTO_CONECTA","TIM","POS_PAGO","MOVEL","OUTROS","301","WHATSAPP_MSG","NAO_FREE",1042554,917409284997"
09/06/19,"TIM","TIM","POS_MAES","MOVEL","HB","999","FREE","FREE",1640,101089540"
09/06/19,"INTERNACIONAL","ROAMING_INBOUND","PRE_PAGO","MOVEL","HB","","OUTROS","NAO_FREE",291402,358292577383"

comando que estou tentando: sed 's/ [^ ]\+ *$//g'




  


2. Re: Apagar o ultimo caracter da linha usando sed

André Gonçalo
SnwMds

(usa Debian)

Enviado em 10/09/2019 - 14:03h

Use:
sed -r 's/.$//g' 


Onde:

-r (parâmetro): Indica que o nosso padrão é um RegEx "expressão regular" e que o sed deverá usá-lo para encontrar "matches".
. (ponto): Indica que estamos procurando por qualquer caractere.
$ (cifrão): Indica que aquilo que estamos procurando está sempre no final de cada linha.

Então, usando ".$" no sed com RegEx, significa que estamos procurando por qualquer caractere que esteja no final de cada linha.


3. Apagar o ultimo caracter da linha usando sed

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 10/09/2019 - 14:24h

SnwMds escreveu:

Use:
sed -r 's/.$//g' 


Onde:

-r (parâmetro): Indica que o nosso padrão é um RegEx "expressão regular" e que o sed deverá usá-lo para encontrar "matches".
. (ponto): Indica que estamos procurando por qualquer caractere.
$ (cifrão): Indica que aquilo que estamos procurando está sempre no final de cada linha.

Então, usando ".$" no sed com RegEx, significa que estamos procurando por qualquer caractere que esteja no final de cada linha.


Cara não funcional, será que tenho que colocar as aspas no lugar do ponto?


4. Re: Apagar o ultimo caracter da linha usando sed

André Gonçalo
SnwMds

(usa Debian)

Enviado em 10/09/2019 - 14:47h

O . (ponto) literalmente dá "match" em qualquer caractere, seja ele uma letra, número, caractere especial ou qualquer outra coisa.

Testei aqui com o "GNU sed v4.7" e funcionou corretamente:

Comando:
sed -r 's/.$//g' < 'ls.txt' 


Saída:
DIA,"OPERADORA","TIPO_TRAFEGO","TIPO_ASSINANTE","TIPO_SERVICO","TIPO_TARIFACAO","RATING_GROUP","CLASSIFICA_TRAFEGO","DESCARTE_MEDIACAO","SUM(QUANTIDADE)","SUM(VOLUME)"
09/06/19,"PORTO_CONECTA","TIM","POS_PAGO","MOVEL","OUTROS","301","WHATSAPP_MSG","NAO_FREE",1042554,917409284997
09/06/19,"TIM","TIM","POS_MAES","MOVEL","HB","999","FREE","FREE",1640,101089540
09/06/19,"INTERNACIONAL","ROAMING_INBOUND","PRE_PAGO","MOVEL","HB","","OUTROS","NAO_FREE",291402,358292577383


No arquivo "ls.txt", está o texto que você enviou:
DIA,"OPERADORA","TIPO_TRAFEGO","TIPO_ASSINANTE","TIPO_SERVICO","TIPO_TARIFACAO","RATING_GROUP","CLASSIFICA_TRAFEGO","DESCARTE_MEDIACAO","SUM(QUANTIDADE)","SUM(VOLUME)""
09/06/19,"PORTO_CONECTA","TIM","POS_PAGO","MOVEL","OUTROS","301","WHATSAPP_MSG","NAO_FREE",1042554,917409284997"
09/06/19,"TIM","TIM","POS_MAES","MOVEL","HB","999","FREE","FREE",1640,101089540"
09/06/19,"INTERNACIONAL","ROAMING_INBOUND","PRE_PAGO","MOVEL","HB","","OUTROS","NAO_FREE",291402,358292577383"


Se quiser tentar pôr as " (aspas) em vez do . (ponto), também vai funcionar.


5. Re: Apagar o ultimo caracter da linha usando sed

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/09/2019 - 15:33h

Felipe09 escreveu:

Boa tade,

Galera estou com dificuldade de apagar o ultimo caracter de todas as linhas do meu arquivo, o caracter é uma aspas dupla estou tentando com o sed.

DIA,"OPERADORA","TIPO_TRAFEGO","TIPO_ASSINANTE","TIPO_SERVICO","TIPO_TARIFACAO","RATING_GROUP","CLASSIFICA_TRAFEGO","DESCARTE_MEDIACAO","SUM(QUANTIDADE)","SUM(VOLUME)""
09/06/19,"PORTO_CONECTA","TIM","POS_PAGO","MOVEL","OUTROS","301","WHATSAPP_MSG","NAO_FREE",1042554,917409284997"
09/06/19,"TIM","TIM","POS_MAES","MOVEL","HB","999","FREE","FREE",1640,101089540"
09/06/19,"INTERNACIONAL","ROAMING_INBOUND","PRE_PAGO","MOVEL","HB","","OUTROS","NAO_FREE",291402,358292577383"

comando que estou tentando: sed 's/ [^ ]\+ *$//g'


Boa tarde Felipe.
Segue sugestão:
sed -i 's/"$//' arquivo.txt 

Obs: O parâmetro "-i" é para alterar o arquivo, não mostra a saída na tela.
Se não funcionar, verifique se o ultimo caractere, é realmente " com o comando:
cat -A arquivo.txt
O fim de cada linha deve ser "$,
se for diferente, não está no formato do linux,
Se terminar com ^M$ é do Windows => CRLF line terminators
Se tem ^M e está tudo em uma linha, é "Mac OS" => CR line terminators

Com o comando:
file arquivo.txt
Você tem a informação do "line terminators"

Importante => echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts