sed заменяют только первое и последнее пространство в строках

У меня есть файл как это (с намного большим количеством строк):

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)

и я хочу заменить первое и последнее пространство для вкладки, как это:

01230\tBiosynthesis of amino acids\t(1)

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

Я попробовал следующее:

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

Это работало, но в строках как в соответствии с"(TCA cycle)", я добрался \t перед ним, как:

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

Я попробовал некоторые модификации, но ни один из него не работал.

Что мне делать?

3
задан 13 September 2016 в 21:34

1 ответ

Это заменит первые и последние пробелы вкладками:

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

, Например:

$ sed -E 's/^([^ ]*) /\1\t/; s/ ([^ ]*)$/\t\1/' 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)

, Как это работает

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

    , regex ^([^ ]*) соответствует всем непробелам с начала строки до первого пробела и помещает их в группу 1. Это заменяется группой 1, сопровождаемой вкладкой.

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

    regex ([^ ]*)$ соответствует от последнего пробела до в конец строки со всеми непробелами, сохраненными в группе 1. Это - замена вкладкой, сопровождаемой группой 1.

3
ответ дан 1 December 2019 в 16:21

Другие вопросы по тегам:

Похожие вопросы: