sed + como remover caracteres que iniciam ou terminam em cada número

3

Como removo os caracteres . que começam no início de cada número ou terminam em cada número?

Observação - perl um revestimento também é uma boa alternativa para sed .

Exemplo de entrada:

 .23.12.44.5.
 .233.3.3.3
 23.4.5.3.2..
 ....33.2.3.45.5
 .3.3.2.....

Resultado esperado:

 23.12.44.5
 233.3.3.3
 23.4.5.3.2
 33.2.3.45.5
 3.3.2

(note que as linhas podem terminar e / ou começar com espaços em branco (espaços ou tabulações) que devem ser preservadas).

    
por yael 12.05.2013 / 19:05

3 respostas

3

Usando a sintaxe padrão (já que o OP mencionou o Solaris):

sed 's/^\([[:blank:]]*\)\.*//;s/\.*\([[:blank:]]*\)$//'

No Solaris, como de costume, você pode precisar chamar /usr/xpg4/bin/sed ou command -p sed

    
por 12.05.2013 / 21:59
1

Aqui você vai:

sed -e 's/^\(\s*\)\.\+//;s/\.\+\s*$//' your_file

Isso imprimirá o arquivo modificado na saída padrão. Para gravar em outro arquivo, use:

sed -e 's/^\(\s*\)\.\+//;s/\.\+\s*$//' your_file >new_file

Para modificar o arquivo, use

sed -i -e 's/^\(\s*\)\.\+//;s/\.\+\s*$//' your_file

EDITAR

  • Modificado os regexes para considerar (possível) espaços em branco iniciais ou finais.
  • Modificado os regexes para preservar o espaço em branco principal conforme o comentário do manatwork.
por 12.05.2013 / 19:16
0
$ cat foo
.23.12.44.5.
 .233.3.3.3
line1
 23.4.5.3.2..
 ....33.2.3.45.5
 .3.3.2.....

line2
$ sed 's/^ *\.*//;s/\.* *$//' foo
23.12.44.5
233.3.3.3
line1
23.4.5.3.2
33.2.3.45.5
3.3.2

line2
    
por 12.05.2013 / 19:45