![sed 仅替换行中的第一个和最后一个空格](https://linux22.com/image/886709/sed%20%E4%BB%85%E6%9B%BF%E6%8D%A2%E8%A1%8C%E4%B8%AD%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%92%8C%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E7%A9%BA%E6%A0%BC.png)
我有一个像这样的文件(包含更多行):
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 组。