2012-03-31 75 views
29

我想从给定文本文件中删除所有空白。有没有可用的shell命令?或者,如何使用sed来达到此目的。如何从给定文本文件中删除所有空白

我想要的东西,象下面这样:

$猫hello.txt的| sed ....

我试过这个:cat hello.txt | sed 's/ //g'。但它只删除空格,而不是标签。

+0

通过“all whitespace”,你的意思是换行吗? – 2013-06-19 23:54:43

回答

53
$ man tr 
NAME 
    tr - translate or delete characters 

SYNOPSIS 
    tr [OPTION]... SET1 [SET2] 

DESCRIPTION 
    Translate, squeeze, and/or delete characters from standard 
    input, writing to standard output. 

为了消灭所有空格包括换行符,你可以尝试:

cat file.txt | tr -d " \t\n\r" 

您还可以使用TR定义的字符表(学分htompkins评论):

cat file.txt | tr -d "[:space:]" 

例如,为了仅擦去横向空白区域:

cat file.txt | tr -d "[:blank:]" 
+13

你也可以使用'tr'定义的字符类。示例: 删除_all_空格: 'cat file.txt | tr -d“[:space:]”' 删除所有水平空白: 'cat file.txt | tr -d“[:blank:]”' – htompkins 2014-07-24 22:54:41

0

嗯......看起来像sed -e "s/[ \t\n\r\v]//g" < hello.txt的顺序应该是在右边的球场(似乎在任何情况下在cygwin下工作)。

1

试试这个:

sed -e 's/[\t ]//g;/^$/d' 

(发现here

第一部分去除所有标签(\t)和空格,而第二部分将删除所有空行

+0

这实际上起作用。小心解释sed -e's/[\ t] // g;/^ $/d'特别是/^$/d'。我知道^是字符串的开始,$是结束。/d用于在使用sed时删除。但是这个解释如何导致删除空白? – 2016-05-13 06:51:51

+0

我添加了一个解释。 '^ $'匹配空行,因为它正在寻找“行首”(^),然后紧接着“行尾”($)。 – keyser 2016-06-04 11:33:54

10

我认为你可能使用sed擦除空间,同时不会丢失一些信息,如将 更改为另一行。

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g' 
+2

使用'[[:blank:]]的+1而使用cat的使用 – 2013-06-19 23:53:54

+0

'cat'有什么问题? – NReilingh 2014-09-30 11:44:56

+0

@NReilingh - https://www.google.com/search?q=useless+uses+of+cat – jayhendren 2014-10-03 18:28:45

11

简单多了我的意见:

sed -r 's/\s+//g' filename 
+1

我刚刚尝试过这一点,它将修改后的文本输出到STDOUT,但不会更改文件本身。 – 2013-12-09 11:23:23

+3

@MaxWilliams - 只需使用-i(破折号i)与sed的标记 – JeffCharter 2014-09-13 21:19:19

+0

这不会删除换行符,不确定OP是否需要这样。 – 2016-08-10 06:49:39

3

如果你想删除ALL空白,甚至换行:

perl -pe 's/\s+//g' file 
1

这可能是做这件事的最简单的方法:

sed -r 's/\s+//g' filename > output 
mv ouput filename 
0

试试这个:

tr -d " \t" <filename 

(1)有关详细信息,请参阅TR的手册页。我

0

最简单的方法 - >

 echo "Hello my name is Donald" | sed s/\ //g 
2

伙计,在终端的Python test.py。

f = open('/home/hduser/Desktop/data.csv' , 'r') 

x = f.read().split() 
f.close() 

y = ' '.join(x) 
f = open('/home/hduser/Desktop/data.csv','w') 
f.write(y) 
f.close() 
0

这个答案是类似于其他然而,由于一些人一直在抱怨,输出到stdout我只是要表明,它重定向到原始文件和覆盖它。我通常从来不会建议这样做,但有时候又快又脏。

cat file.txt | tr -d " \t\n\r" > file.txt 
相关问题