Como fazer um comando sed para cortar o espaço em branco a partir do final de uma string ou normalizar o espaço em branco na string?

0

Eu tenho alguns dados como os seguintes

"brand": "Some brand name  ", "otherbrand": "Something else ", 

"brand":"Some  third way"

embora um pouco mais não estruturado assim, no entanto, uma estrutura que é a mesma é que há instâncias recorrentes de "marca": por aí, com o valor a seguir tendo espaços em branco inconvenientes.

O que eu preciso fazer é normalizar o espaço em branco e apará-lo no valor para que

"brand": "Some brand name  "

é transformado em

"brand": "Some brand name"

e

"brand":"Some  third way"

é transformado em

"brand":"Some third way"

o tamanho do arquivo é

Eu gostaria de saber como fazer isso com Sed, porque eu acho que vou ter que fazer esse tipo de correção menor nos dados aqui e ali, e eu gostaria de uma maneira de fazer isso ad hoc com apenas uma linha no terminal.

    
por user254694 18.03.2015 / 15:19

2 respostas

0

Isso deve funcionar:

sed 's/ *"/"/g;s/  */ /g'

A primeira parte remove os espaços que estão entre aspas, e a segunda corta todos os espaços em um único espaço:

 $ echo "Before:"; cat $TEMP/test.txt; echo "After:";sed 's/ *"/"/g;s/  */ /g' $TEMP/test.txt
Before:
"brand": "Some brand name  ", "otherbrand": "Something else ",
"brand":"Some  third way"
After:
"brand":"Some brand name","otherbrand":"Something else",
"brand":"Some third way"
    
por 18.03.2015 / 16:06
0
sed ':in
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{2,\}/ /
t in
:edge
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{1,\}"/"/
s/^\(\([^"]*"[^"]*"\)*[^"]*"\) \{1,\}//
t edge
' YourFile
  • versão POSIX, então --posix -e para o gnu sed
  • recursiva remove o espaço múltiplo dentro da string de aspas (não toque entre, poderia ser feito com poucas modificações)
  • recursiva remove o espaço de borda dentro de uma string entre aspas (uma para começar e uma para terminar)
por 20.03.2015 / 13:58

Tags