Estou tendo alguns problemas com os arquivos de configuração que contêm os caracteres de espaço ininterrupto.
Como devo especificar esse caractere com sed para que eu possa substituí-lo por um espaço.
sed -n 's/ / /g'
exemplos dos erros
serviço chamado restart Parando com o nome: [OK] Começando com o nome: Erro na configuração nomeada: named.localhost: 2: tipo RR desconhecido 'SOA' named.localhost: 8: tipo desconhecido de RR '@' named.localhost: 9: tipo desconhecido de RR '127.0.0.1' named.localhost: 10: tipo desconhecido de RR ':: 1' .....
Eu tentei incluir uma linha do arquivo incorreto original neste post. Não parece estar funcionando. O download do Pastebin é a única ferramenta que mantém todo o binário original. http://pastebin.com/ZqT1EWbS . Você deve copiar e colar a linha original e fazê-la funcionar em seu terminal.
linux
vim
sed
special-characters
nelaaro
fonte
fonte
Respostas:
A resposta a esta pergunta depende de qual dos caracteres espaciais que você está encontrando.
Abaixo estão exemplos de como substituir cada um dos caracteres de espaço sem quebra mencionados no título das perguntas e, adicionalmente, a versão UTF-8 (
C2 A0
) que o OP está realmente perguntando de acordo com a saída do pastebin.Todos os exemplos são usados
printf
para gerar a saída, pois é mais portátil queecho
. Os caracteres de espaço são substituídos porX
's para tornar a saída mais clara.Exemplos
html
octal 240 = decimal 160 = hex A0
Ou com
tr
:U + 00A0
UTF-8
Resultado
A saída em todos os casos acima é:
Responda
Agora, para sua pergunta, você tem dados parecidos com este:
Saída:
Para substituir os
C2 A0
s por espaço comum, use o seguinte:Saída:
fonte
sed -i.orig 's/\xa0/ /g'
Dessa forma, ele não atualiza o arquivo original, mas salva o original comooriginalname.txt.orig
(ou qualquer extensão especificada, como .bak)sed 's/\xa0/ /g'
você removerá apenas o caractere A0 e deixará o C2. Ou seja, pelo menos o comportamento que estou vendo, mesmo com um código de idioma UTF-8 em uso.Obrigado por todos aqueles que me ajudam a chegar a uma solução funcional.
Eu tentei incluir uma linha do arquivo incorreto original neste post. Não parece estar funcionando. O download do Pastebin é a única ferramenta que mantém todo o binário original. http://pastebin.com/ZqT1EWbS . Você deve copiar e colar a linha original e fazê-la funcionar em seu terminal.
Então, aqui está o que acontece se eu remover o octal
\0240
ou o hex\xA0
. Ele adiciona alguns outros personagens descolados.Existem alguns dados extras não impressos nos arquivos reais. Eu achei a ferramenta od (octal dump) bastante útil para me mostrar quais são os valores reais de hex / oct / binário para toda a linha.
O outro caractere que continuava aparecendo era
\xC2
Ele não é impresso quando o espaço\xA0
não está presente, mas aparece se o nbsp for removido. Então eu tive que modificar a linha sed na resposta @Thor para removê-la também.Isto é o que funcionou para mim.
fonte