2011-09-26 116 views

回答

22

sed不知道转义序列,如\t。所以,你将有你的控制台上逐字输入一个tab

sed 's/^ *$//g' <filename> 

如果你是bash的,那么你就不能在控制台上键入tab。您将必须执行^V,然后按tab。 (Ctrl-V,然后tab)打印文字选项卡。

+8

如果使用bash,您也可以使用'sed $'s/^ \ t * $ // g'',因为在单引号字符串格式上使用美元符号转义代码如\ t。 –

+0

好的最大!不知道。你应该把它作为一个单独的答案。 –

+0

你已经足够接近了。 :) –

1

其他发布的解决方案将在行中有1个(且仅有1个)选项卡时起作用。请注意,Raze2dust指出sed要求你输入一个文字标签。一种替代方案是:

sed '/[^  ]/!s/ //g' file-name.txt 

哪个代替了仅包含制表符的行的制表符。倒排类匹配包含任何bug的行 - 下面的'!'导致它不符合这些行 - 意味着只有只有制表符的行。替换然后只在这些行上运行,删除所有选项卡。

2

要与一个空行代替任意空白行,使用

sed -r 's/^\s+$//' 

-r标志表示使用扩展正则表达式,而^ \ S + $模式与一些空白的所有行,但没有其他字符匹配。

-1
grep -o ".*" file > a; mv a file; 
+0

这完全是什么?因为它没有做OP所要求的。 –

+0

不确定是否拖钓,但如果是的话,精彩.... – ansiart

0

我注意到\ t不被UNIX识别。被说,使用真正的钥匙。在下面的代码中,TAB表示按Tab键。

$ sed的“S/TAB // G”的oldfile> newfile中

友情提示:以确保你有文件中的标签,你试图删除从使用标签下面的代码,看看是否\ t出现

$ od -c filename