如何从给定的文本文件中删除所有空格


81

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

我想要以下内容:

$ cat hello.txt | sed ....

我试过了:cat hello.txt | sed 's/ //g'。但是它只删除空格,而不删除制表符。


3
通过“所有空白”,您是否也表示换行符?
glenn jackman

Answers:


132
$ 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:]"

23
您还可以使用定义的字符类tr。示例:删除所有空白:cat file.txt | tr -d "[:space:]" 删除所有水平空白:cat file.txt | tr -d "[:blank:]"
htompkins 2014年

@ user3901666它将删除空格,是的,如果产生的输出将与您想要的匹配,很难说-您尝试了什么?
Paulo Scardine

24

我认为简单得多:

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

2
我刚刚尝试过,它会将修改后的文本输出到STDOUT,但不会更改文件本身。
Max Williams

4
@MaxWilliams-只需将-i(破折号i)标志与sed一起使用
-JeffCharter

1
这不会删除换行符,不确定OP是否需要换行符。
Graeme Moss

11

我认为您可以使用sed擦除空间,而不会丢失某些信息,例如更改为另一行。

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

4
很好,但我认为我无法让自己写作tr -d " " < infile.txt > outfile.txt
NReilingh 2014年

您好,这很感谢,但是请您多多解释。
David Okwii '16

10

试试这个:

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

(在这里找到)

第一部分删除所有制表符(\t)和空格,第二部分删除所有空行


这实际上有效。仔细解释sed -e's / [\ t] // g; / ^ $ / d'特别是/ ^ $ / d'。我知道^是字符串的开头,$是结尾。/ d用于在使用sed时删除。但是这种解释如何导致空白的删除?
David Okwii '16

我加了一个解释。^$匹配空行,因为它正在寻找“行首”(^),然后在“行尾”($)之后。
键盘手


4

对我来说最简单的方法->

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


2

试试这个:

tr -d " \t" <filename

有关更多详细信息,请参见tr(1)的手册页。


2

杜德(Dude),在终端中输入pythontest.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()

很抱歉碰到一个旧线程,但是f.read().strip("\t\n\r ")效率更高吗?
雅克迪奇(Jachdich)

如果后面有两个或多个空格,制表符等黑白单词怎么办?我认为您的解决方案是针对空格的开头和结尾。如果需要一个衬板,则可以轻松转换以上代码。
Agnibesh Chauhan

2

这个答案与其他答案类似,但是由于有些人一直抱怨输出到STDOUT,我只是建议将其重定向到原始文件并覆盖它。我通常不会建议这样做,但有时会快速而肮脏。

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

1

嗯...似乎sed -e "s/[ \t\n\r\v]//g" < hello.txt应该在正确的范围内(无论如何在cygwin下都可以工作)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.