如何在第一次出现“;”之间删除所有内容第一个空格/标签?

时间:2013-11-08 13:49:32

标签: sed tabs delimiter

我有一个包含许多行的文本文件,所有行都采用相同的格式。我想删除第一次出现的“;”之间的所有文本和第一个制表符或空格字符(它的制表符分隔,但它可能只是空格)。

该文件如下所示:

Q5F5R2  Bacteria
Q5F9Q8  Bacteria
Q5F850  Bacteria
Q5F851  Bacteria
Q5F7X1;Q5F832;Q5822   Bacteria
Q5F848  Bacteria
Q5F847  Bacteria
Q5FAF5  Bacteria
Q5F881;Q9RF92   Bacteria
Q5F5F3  Bacteria

我想保留第一个入藏号,使其看起来像这样:

Q5F5R2  Bacteria
Q5F9Q8  Bacteria
Q5F850  Bacteria
Q5F851  Bacteria
Q5F7X1  Bacteria
Q5F848  Bacteria
Q5F847  Bacteria
Q5FAF5  Bacteria
Q5F881  Bacteria
Q5F5F3  Bacteria

我到处寻找解决方案,但没有任何效果,主要是sed,例如:sed's /\; .* //'但它没有做任何事情。

帮助!

其他评论:

我想你也可以将第一列截断为前6个字符。但我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

试试这个:

sed 's/;[^\t]*//' file

添加测试:

kent$  cat f
Q5F5R2  Bacteria
Q5F9Q8  Bacteria
Q5F850  Bacteria
Q5F851  Bacteria
Q5F7X1;Q5F832;Q5822     Bacteria
Q5F848  Bacteria
Q5F847  Bacteria
Q5FAF5  Bacteria
Q5F881;Q9RF92   Bacteria
Q5F5F3  Bacteria

kent$  sed 's/;[^\t]*//' f
Q5F5R2  Bacteria
Q5F9Q8  Bacteria
Q5F850  Bacteria
Q5F851  Bacteria
Q5F7X1  Bacteria
Q5F848  Bacteria
Q5F847  Bacteria
Q5FAF5  Bacteria
Q5F881  Bacteria
Q5F5F3  Bacteria

答案 1 :(得分:1)

awk解决方案:

awk '{sub(/;[^\t]*\t/,"\t")}1' file
Q5F5R2  Bacteria
Q5F9Q8  Bacteria
Q5F850  Bacteria
Q5F851  Bacteria
Q5F7X1  Bacteria
Q5F848  Bacteria
Q5F847  Bacteria
Q5FAF5  Bacteria
Q5F881  Bacteria
Q5F5F3  Bacteria

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed 's/;\S\+//' file