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

Lun*_*oms 64 linux bash sed

我想从给定的文本文件中删除所有空格.有没有可用的shell命令?或者,如何sed用于此目的.

我想要下面的东西:

$ cat hello.txt | sed ....

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

Pau*_*ine 103

$ 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.
Run Code Online (Sandbox Code Playgroud)

为了擦除包括换行符在内的所有空格,您可以尝试:

cat file.txt | tr -d " \t\n\r" 
Run Code Online (Sandbox Code Playgroud)

您还可以使用tr定义的字符类(对htompkins注释的信用):

cat file.txt | tr -d "[:space:]"
Run Code Online (Sandbox Code Playgroud)

例如,为了擦除水平空白区域:

cat file.txt | tr -d "[:blank:]"
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用`tr`定义的字符类.示例:要删除_all_空格:`cat file.txt | tr -d"[:space:]"`删除所有水平空格:`cat file.txt | tr -d"[:blank:]"` (19认同)

小智 16

我的观点更为简单:

sed -r 's/\s+//g' filename
Run Code Online (Sandbox Code Playgroud)

  • @MaxWilliams - 只需在sed中使用-i(dash i)标志 (4认同)
  • 我刚刚尝试过,它会将修改后的文本输出到STDOUT,但不会更改文件本身。 (2认同)
  • 这不会删除换行符,不确定OP是否想要这样做。 (2认同)

小智 11

我认为你可以使用sed来消除空间,同时不会丢失一些信息,比如换到另一条线.

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'
Run Code Online (Sandbox Code Playgroud)

  • 很好,但我认为我不能把自己写成`tr -d""<infile.txt> outfile.txt` (4认同)
  • +1使用`[[:blank:]]`但-1使用cat (2认同)

key*_*ser 5

尝试这个:

sed -e 's/[\t ]//g;/^$/d' 
Run Code Online (Sandbox Code Playgroud)

(在这里找到)

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


gle*_*man 5

如果要删除所有空格,甚至是换行符:

perl -pe 's/\s+//g' file
Run Code Online (Sandbox Code Playgroud)


小智 5

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

cat file.txt | tr -d " \t\n\r" > file.txt
Run Code Online (Sandbox Code Playgroud)