sed 仅替换行中的第一个和最后一个空格

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).

我尝试了一些修改,但都没有效果。

我应该怎么办?

答案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/

    正则表达式^([^ ]*)匹配从行首到第一个空格的所有非空格,并将它们放入第 1 组。这将替换为第 1 组后跟一个制表符。

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

    正则表达式([^ ]*)$从最后一个空格匹配到行尾,所有非空格都存储在第 1 组中。这将替换为制表符,后跟第 1 组。

相关内容