我有一个制表符分隔的文件,但在一些记录中,我在数据之间看到多个制表符
示例数据: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$
如您所见,它仅删除了多个选项卡的实例。单个选项卡仍然存在。