【问题标题】:How to remove all white spaces from a given text file如何从给定的文本文件中删除所有空格
【发布时间】:2012-04-14 18:09:53
【问题描述】:

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

我想要类似下面的东西:

$ cat hello.txt | sed ....

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

【问题讨论】:

  • “全空白”,你的意思是换行吗?

标签: linux bash sed


【解决方案1】:
$ 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:]"

【讨论】:

  • 也可以使用tr定义的字符类。示例:删除所有空格:cat file.txt | tr -d "[:space:]"删除所有水平空格:cat file.txt | tr -d "[:blank:]"
  • @user3901666 它将删除空格,是的,如果产生的输出与您想要的匹配很难说 - 您尝试了什么?
【解决方案2】:

在我看来要简单得多:

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

【讨论】:

  • 我刚刚尝试过,它会将修改后的文本输出到 STDOUT,但不会更改文件本身。
  • @MaxWilliams - 只需在 sed 中使用 -i(破折号 i)标志
  • 这不会删除换行符,不确定 OP 是否想要这样做。
【解决方案3】:

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

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

【讨论】:

  • 很好,但我想我不能让自己写tr -d " " < infile.txt > outfile.txt
  • 你好,谢谢,但我希望能得到一些解释。
【解决方案4】:

试试这个:

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

(找到here

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

【讨论】:

  • 这确实有效。注意解释 sed -e 's/[\t ]//g;/^$/d' 特别是 /^$/d'。我知道 ^ 是字符串的开头, $ 是结尾。 /d 用于在使用 sed 时删除。但是这种解释是如何导致删除空格的呢?
  • 我添加了一个解释。 ^$ 匹配一个空行,因为它正在寻找“行首”(^),然后是“行尾”($)。
【解决方案5】:

如果您想删除 ALL 空格,甚至换行符:

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      对我来说最简单的方法:

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

      【讨论】:

        【解决方案8】:

        伙计,在你的终端中只需要 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()
        

        【讨论】:

        • 抱歉打了一个老话题,但是f.read().strip("\t\n\r ")不是更有效率吗?
        • 如果后面有两个或多个空格、制表符等黑白字怎么办?我认为您的解决方案是针对前导和尾随空格。如果你想要一个班轮,你可以很容易地转换上面的代码。
        【解决方案9】:

        这可能是最简单的方法:

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

        【讨论】:

          【解决方案10】:

          试试这个:

          tr -d " \t" <filename
          

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

              猜你喜欢
              • 2014-06-19
              • 2011-10-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-05
              • 2022-08-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多