Como fazer um comando sed para aparar espaços em branco a partir do final de uma string ou normalizar espaços 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 desestruturado assim, no entanto, uma estrutura que é a mesma é que existem instâncias recorrentes de "marca": around, com o seguinte valor tendo espaços em branco inconvenientes.

O que 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 é

Gostaria de saber como fazer isso com o Sed, porque acho que vou ter que fazer esse tipo de correção menor nos dados aqui e ali, e gostaria de uma maneira de fazê-lo ad hoc com apenas uma linha em o terminal.


Isso é específico ao valor da "marca"?
glenn jackman

Respostas:


0

Isso deve funcionar:

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

A primeira parte remove todos os espaços que estão à direita entre aspas e a segunda reduz quaisquer espaços múltiplos 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"

é apenas meu teste ou isso resulta em um espaço extra depois de "alguma marca" e a seguinte vírgula? eu recebo: 'marca: Alguns marca, otherbrand: Something else'
Daniel

@ Daniel eu adicionei exemplo de saída, eu acho que é ok
gogoud

parece correto - o meu fornece um espaço extra. A versão do sed é 4.2.1
Daniel

@ Daniel: Estou usando o sed (GNU sed) 4.2.2.
gogoud

0
sed ':in
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{2,\}/\1 /
t in
:edge
s/^\(\([^"]*"[^"]*"\)*[^"]*"[^"]*\) \{1,\}"/\1"/
s/^\(\([^"]*"[^"]*"\)*[^"]*"\) \{1,\}/\1/
t edge
' YourFile
  • Versão POSIX --posix -epara gnu sed
  • recursivo remova o espaço múltiplo dentro da string de citação (não toque entre, pode ser feito com poucas modificações)
  • recursivo remove o espaço da aresta dentro da string entre aspas (uma para início e outra para finalização)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.