2012-03-31 71 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 
相關問題