remove o espaço em branco antes do delimitador com sed

2

Eu tenho dados do seguinte formato que eu quero inserir no LibreOffice calc

data | num   | num | num     | num

Por alguma razão, o Libreoffice não acha que a string "3214" seja um número por padrão (espaço em branco à direita).

Desejo substituir (\s)*| por | , em que \s representa espaço e * pela operação da estrela Kleene. E faça isso em vários lugares em cada linha (todos os jogos).

Eu tentei:

sed  -i 's/(\s)*|/|/' DataStats0914.txt

Mas isso não tem efeito.

    
por Erik 22.10.2012 / 06:41

4 respostas

4

Por que você cita isso? Se você quiser referências, use \( e \) ,

Além disso, observe a opção g , já que esse padrão aparece várias vezes

sed -i 's/\s*|/|/g' DataStats0914.txt

Caso de teste:

echo 'data | num | num | num | num' | sed 's/\s*|/|/g'

Tem:

data| num| num| num| num

    
por 22.10.2012 / 07:31
2

Existem várias sintaxes diferentes expressão regular . (\s*) corresponde a uma sequência de espaços em branco em Perl e em muitos outros programas modernos que imitam suas regexes. Sed usa uma variante mais antiga de expressões regulares básicas , em que os parênteses representam a si próprios e \(…\) é usado para agrupamento. O GNU sed (a versão no Linux) tem uma opção -r para usar expressões regulares estendidas (que regexes do Perl estendem mais) em vez disso. Além disso, | significa para si mesmo em BRE, mas deve ser precedido por uma barra invertida em ERE.

s/[ \t]\+|/|/ substitui o espaço em branco seguido por um | com o GNU sed. Se você quiser um comando sed compatível com POSIX, use s/[ ][ ]*|/|/ , onde cada par de colchetes contém um espaço e uma guia, pois \t e \+ são extensões GNU. Além disso, o comando s substitui apenas uma ocorrência por linha: adicione o sufixo g para substituir todas as ocorrências.

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt
    
por 23.10.2012 / 01:14
0

sed remover espaços:

sed -i 's/ *|/|/g' file
    
por 22.10.2012 / 06:44
0

Pythonish three liner, não testado:

python -c 'import sys
for l in sys.readlines():
    print("| ").join([f.strip() for f in l.strip().split("|")])'
    
por 13.11.2014 / 17:14