pt sed substituir apenas o primeiro e último espaço em linhas

3

Eu tenho um arquivo como este (com muito mais linhas):

01200 Carbon metabolism (1)

01210 2-Oxocarboxylic acid metabolism (1)

01212 Fatty acid metabolism (2)

01230 Biosynthesis of amino acids (1)

00020 Citrate cycle (TCA cycle) (1)

e quero substituir o primeiro e o último espaço de uma guia, assim:

01230\tBiosynthesis of amino acids\t(1)

00020\tCitrate cycle (TCA cycle)\t(1)

Eu tentei o seguinte:

sed 's/ /\t/;s/ (/\t(/' eg_kaas_pwmap > res.tsv

Funcionou, mas em linhas como na linha com " (TCA cycle) ", recebi o \t antes, como:

00020\tCitrate cycle\t(TCA cycle) (1).

Eu tentei algumas modificações, mas nada disso funcionou.

O que devo fazer?

    
por Tiago Minuzzi 13.09.2016 / 20:30

1 resposta

3

Isso substituirá o primeiro e o último espaço das guias:

sed -E 's/^([^ ]*) /\t/; s/ ([^ ]*)$/\t/' pwmap

Por exemplo:

$ sed -E 's/^([^ ]*) /\t/; s/ ([^ ]*)$/\t/' pwmap
01200   Carbon metabolism       (1)
01210   2-Oxocarboxylic acid metabolism (1)
01212   Fatty acid metabolism   (2)
01230   Biosynthesis of amino acids     (1)
00020   Citrate cycle (TCA cycle)       (1)

Como funciona

  • s/^([^ ]*) /\t/

    O regex ^([^ ]*) corresponde a todos os não-blocos desde o início da linha até o primeiro espaço em branco e os coloca no grupo 1. Isso é substituído pelo grupo 1 seguido por uma tabulação.

  • s/ ([^ ]*)$/\t/

    O regex ([^ ]*)$ corresponde do último espaço em branco até o final da linha com todos os não-brancos armazenados no grupo 1. Isso é substituído por uma guia seguida pelo grupo 1.

por John1024 13.09.2016 / 20:39