用sed将制表符替换为单个制表符

9
我想用sed将所有多个tab替换为单个tab。 我试图使用:
sed 's:\t+:\t:' .\text.CSV > newtext.csv

但是这似乎不起作用。

如果我在Sublime中打开,并使用正则表达式将所有的\t+替换为\t,它可以正常工作。

我的sed有什么问题吗?

另外,如果我将制表符替换为逗号,则会出现

sed 's:\t\t*:,:g' text.CSV > newtext.csv

我收到了这样一行文字。
264262360,20030826,200308,2003,2003.6466,BUS,EMPLOYER,,,,,,BUS,,, ,,,,,,,,,,0,051,051,05,1,3.4,12,2,12,5.24866163479182,1

1
请记住,+ 表示一个或多个,因此也可以写成 \t\t* - potong
如果\t无法正常工作,请尝试在*nix终端中使用[Ctrl]-[v] [Tab](参见此答案)。复制并粘贴制表符可能有效,但在我的终端中,制表符被替换为四个空格。 - Joel Purra
3个回答

20

您还可以使用 tr 将多个制表符替换为一个单一制表符:

tr -s '\t' '\t' < inputfile > outfile

-s选项可以压缩重复内容:

-s, --squeeze-repeats

      replace each input sequence of a repeated character that is
      listed in SET1 with a single occurrence of that character

2
请注意,tr -s '\t'已经足够压缩制表符了,第二个'\t'是不必要的。 - fedorqui

8
使用-r选项和g标志:
sed -r 's:\t+:\t:g' text.CSV > newtext.csv

使用-r参数使得+正常工作。

使用g参数替换所有匹配项。

更新

如果你的sed不支持-r选项,请尝试以下方法:

sed 's:\t\t*:\t:g' text.CSV > newtext.csv

@NickGinanto,你用什么操作系统? - falsetru
@NickGinanto,你从哪里下载的 sed - falsetru
我没有,我很高兴地找到了它 :) 我应该在哪里下载它? - Nick Ginanto
@NickGinanto,在我的Windows 7电脑上找不到sed - falsetru
@NickGinanto,我安装了git,使用包含它们的sed,我得到了预期的结果。请参见截图 - falsetru
显示剩余4条评论

0
你也可以使用 sed“s/ \ t \ + / \ t / g”test.csv >> newtest.csv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接