Remover caracteres esquisitos

1. Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/06/2017 - 16:37h

Olá a todos,

Tenho varios ficheiros com este nome:

saber_eletr├┤nica_especial_n┬║_07.pdf

O que vai mundando é o número, correspondente a cada ficheiro.

Como consigo eliminar os caracteres esquisitos? Pretendo que o nome fique:

saber_eletrnica_especial_n_07.pdf


Obrigado


  


2. Re: Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/06/2017 - 19:26h

Agora é que reparei que o nome do ficheiro não aparece como está na realidade. Aqui vai uma imagem do mesmo: http://imgur.com/a/0qBUV


3. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 19:48h

ede_linux escreveu:

Olá a todos,

Tenho varios ficheiros com este nome:

saber_eletr├┤nica_especial_n┬║_07.pdf

O que vai mundando é o número, correspondente a cada ficheiro.

Como consigo eliminar os caracteres esquisitos? Pretendo que o nome fique:

saber_eletrnica_especial_n_07.pdf


Obrigado


1- Não esta faltando fontes no seu sistema?

2- Um for e mv no diretório resolve seu problema.

3- Onde você baixou o arquivo?

4- Qual a codificação do seu sistema?



4. Re: Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/06/2017 - 21:49h

Mesmo faltando fontes no meu sistema como posso simplesmente remover esses caracteres?
Os arquivos são de um disco que tinha, com revistas, que não sei como ficaram assim com o nome!

O comando mv é uma boa solução, mas como faço para executar ele em cada um dos arquivos e remover apenas os caracteres que não pertencem ao ASCI?


5. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 22:01h

É alguma coisa mais ou menos assim feito um script:

for i in *.pdf; do

com este comando você lê o nome de todos os arquivos desse diretório

j=`echo "$i" | sed 's/[^A-Za-z0-9_.]//g'`

com este comando você cria em $j um valor semelhante ao nome original do arquivo, mas apagando todos os caracteres que não são maiúsculas, minúsculas, dígitos, underline ou ponto, é isto mesmo que deseja?

mv "$i" "$j"

com isto o nome do arquivo velho é substituído pelo nome novo

done

e isto fecha o loop for.

for i in *.pdf
do
j=`echo "$i" | sed 's/[^A-Za-z0-9_.]//g'`
mv "$i" "$j"
done


Crie um diretório espelho com cópias dos arquivos para fazer o teste da renomeação e verificar se é efetivo.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/06/2017 - 22:41h

Obrigado pelo excelente post! :)
Vamos lá dissecar este comando

j=`echo "$i" | sed 's/[^A-Za-z0-9_.]//g'`

no echo "$i" eu imprimo o resultado da variável $i. Que foi alimentada no inicio do ciclo for. Essa variável contem uma lista de todos os nomes no directorio.
Fiz esse script para perceber como funciona:

#!/bin/bash

for i in *.pdf
do
echo $i
done


A barra na vertical, |, serve para executar um segundo comando na mesma instrução. Certo?
O programa sed já ouvi falar, já li e já utilizei algumas vezes. Mas ainda não sei trabalhar bem com ele!
O que está entre as plicas, é o que pretendemos que o comando sed execute. Entendo essa parte A-Za-z0-9_. mas o resto e a razão da sua ordem eu não entendo!
Existe alguma apostila onde utilize a utilizar sed? Estou interessado na manipulação de texto. Razão principal da existência do sed, segundo o seu manual "sed - stream editor for filtering and transforming text".

Por exemplo, pretendo remover caracteres que tenham acento. Não sei como se faz. Ao invés de andar sempre a pesquisar, gostava de ler sobre o poder do programa sed e assim ficar a conhecer até funcionalidades que não sabia que existiam!

Obrigado, o seu script atendeu às minhas necessidades :)


7. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 22:55h

A variável $i toma o valor de nome de um arquivo a cada ciclo do comando for.
Ela não fica com todos os nomes de uma vez.

Sed quer dizer stream editor: editor de fluxo. Ele faz a leitura de algum conjunto de dados e o modifica através de regras chamadas de expressões regulares.

's/regex1/alguma_coisa/g'

a tal regex1:

[^A-Za-z0-9_.]

Conjuntos dentro de colchetes significam listas de caracteres. No caso sequência de 'A' a 'Z', de 'a' a 'z', de '0' a '9', mais os caracteres underline e ponto.

Tem um porém: inicia com o chapeuzinho ^. Quando esse chapeuzinho aparece no início de uma lista de caracteres significa negação. Ou seja, apenas os caracteres que não forem letras, números, pontos ou underline.

Portanto o comando sed faz a substituição no fluxo emitido pelo comando echo dos caracteres estranhos, os que não são aqueles citados antes. A variável $j deve ficar apenas com as letras e os outros.

Existem referências em português para sed e correlatos:

site: http://aurelio.net/sed/ onde está o resto dos sites sobre o tema

lista de discussão no yahoo: sed-br (procure no link acima!) ainda em funcionamento e mantida pelo próprio Aurelio!

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



8. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 22:57h

Adendo:

Para trocar acentuadas é mais chato: algo como

sed 'y/áàâ/aaa/'

Nunca testei.

Ou pode ser com o comando tr.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



9. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 23:39h


Esses caracteres esquisitos aparece em outros sistemas operacional (Mac, Windows, Unix ....)?

Já tive 3 casos diferente com caracteres esquisitos.

1 Foi falta de fonte no sistema.

2 As palavras acentuadas apareciam com caracteres estranhos.

Para descobrir a codificação de origem pode-se usar a ferramenta file, exemplo:

file arquivo

http://rberaldo.com.br/problemas-com-codificacao-acentos-nao-interpretados/
http://www.vivaolinux.com.br/dica/Consertando-codificacao-de-arquivos-UTF-8-x-ISO-8859-1

3 Usei o for e mv num script.




10. Re: Remover caracteres esquisitos

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/06/2017 - 23:44h

Poderia envia uma copia do arquivo com esses caracteres esquisitos para fazer um teste?


11. Re: Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 25/06/2017 - 08:58h

listeiro_037 escreveu:

Adendo:

Para trocar acentuadas é mais chato: algo como

sed 'y/áàâ/aaa/'

Nunca testei.

Ou pode ser com o comando tr.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Funcionou apenas assim:

# Fonte: https://www.vivaolinux.com.br/topico/Shell-Script/Remover-caracteres-esquisitos/?pagina=1

for i in *.pdf
do
# ^ Quando esse chapeuzinho aparece no início de uma lista de caracteres significa negação;
j=`echo "$i" | sed 's/[^A-Za-z0-9_.]//g'`
# Vai remover todos os acentos das letras indicadas - https://www.vivaolinux.com.br/topico/Shell-Script/Script-para-retirar-acentos
j=`echo "$j" | sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/'`
mv "$i" "$j"
done

Tentei fazer assim:

j=`echo "$i" | sed 's/[^A-Za-z0-9_.]áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚçÇ/aAaAaAaAeEeEiIoOoOoOuUcC/g'`

Mas não funcionou! Aparecia a mensagem "os ficheiros são os mesmos" em cada comando mv. É o mesmo erro que aparece se tentar fazer um mv em que o nome de destino é igual ao nome de origem.

Vou ler a documentação,
Obrigado




12. Re: Remover caracteres esquisitos

Ede
ede_linux

(usa Ubuntu)

Enviado em 25/06/2017 - 09:06h

meianoite escreveu:

Poderia envia uma copia do arquivo com esses caracteres esquisitos para fazer um teste?


Aqui vai a repositório:
https://www.4shared.com/folder/jzMxq3kC/Revistas_Saber_Eletrnica.html



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts