删除数据之间的多个 TABS

删除数据之间的多个 TABS

我有一个制表符分隔的文件,但在一些记录中,我在数据之间看到多个制表符

示例数据:M^I^I^I^IJaghoub(^I 是 cat -vet 输出中的制表符分隔符)所需输出:MJaghoub

我使用了 sed 和 tr 命令但没有成功。

请告知如何仅删除多个 TABS。

答案1

tr -s '\t' <file >newfile

应该将彼此相邻的多个制表符压缩到单个制表符中,file并将修改后的内容写入newfile.

更改-s-d删除所有选项卡。

答案2

sed 's|[\t][\t][\t]*||g' file.txt

这将删除两个或多个选项卡的任何实例,但不会影响单个选项卡的任何实例。

如果您确认拥有所需的输出并且想要就地编辑文件,则可以添加-i'

sed -i 's|[\t][\t][\t]*||g' file.txt

我已经使用具有 1、2、3、4 和 5 个选项卡实例的文件对此进行了测试,它删除了多个选项卡的实例,同时保留了单个选项卡的实例。它有效地删除两个选项卡的任何实例,并且随后出现 0 个或多个选项卡。

为了确认,我在问题中添加了更多带有多个选项卡和单个选项卡实例的行:

文件带有cat -vet( 不要担心$,它只是代表行结尾。如果您使用cat -vT,它没有$代表行结尾:

M^I^I^I^I^IJaghoub$
askdjfkasdf^I^Iksajk^I^Ijklsajkd$
klasjdfj^I^I^Ikljkasjdf^Ijaljkdsf$
asdkfj^I^I^Iklkljasdf^I^Ilkjkasdf$
sadfjkl^Ikjljas^Ikkjk^Ilkjlkj$

输出:

MJaghoub$
askdjfkasdfksajkjklsajkd$
klasjdfjkljkasjdf^Ijaljkdsf$
asdkfjklkljasdfkjkasdf$
sadfjkl^Ikjljas^Ikkjk^Ilkjlkj$

如您所见,它仅删除了多个选项卡的实例。单个选项卡仍然存在。

相关内容