【问题标题】:How to replace all spaces in .txt file using SED in Cygwin如何在 Cygwin 中使用 SED 替换 .txt 文件中的所有空格
【发布时间】:2013-10-29 01:42:50
【问题描述】:

我有一个巨大的 .txt 文件,我希望删除所有空格、换行符、缩进等。它应该是一个长字符串。

我试过了

sed -i 's/\ //g' test.txt

但什么也没发生

【问题讨论】:

    标签: bash sed cygwin


    【解决方案1】:
    sed -n "s/[[:blank:]]//g;H
    $ {x;s/\n//g;p;}"
    

    如果您想包含新行,则需要 H 比 $ ,因为 sed 默认逐行处理(因此一行内没有新行)。需要 -n 和 p 以避免使用 H 进行双重显示

    【讨论】:

      【解决方案2】:

      对我来说似乎工作正常:

      [~/Desktop]
      ==> cat test.txt
      the quick brown fox
      
      [~/Desktop]
      ==> sed -i "s/\ //g" test.txt
      
      [~/Desktop]
      ==> cat test.txt
      thequickbrownfox
      

      【讨论】:

      • 似乎没有什么不同。为了清楚起见,我什至不想要单词之间的空格。所以“快速棕色狐狸”应该变成快速棕色狐狸
      • 奇怪的是它不起作用。它对我来说很好(单引号和双引号)。也许超级用户会是一个更好的论坛。
      • 嗯。经过仔细检查,它确实删除了空格。但是,我也希望它删除所有换行符,因此它只是一大堆字符
      【解决方案3】:

      有时直接使用 " " 很困难,尤其是当您使用双引号时(这涉及到 bash 在将字符串传递给 sed 之前会对其进行解释)。

      sed -i -e 's/\s//g' file.txt
      

      ... 应该可以工作(它对我有用)。 "\s" 表示所有空白字符,并带有单引号 '',以便 bash 在将其传递给 sed 之前不会对其进行解释。

      【讨论】:

      • \s 仅表示较新版本的 GNU sed 中的所有空白字符。它不是 BRE 的一部分。
      【解决方案4】:

      虽然您使用 cygwin,但我认为您的操作系统是 windows,那么您不需要使用 bash 来实现您的目标。只需使用文本编辑器打开您的 txt 文件,然后将空白替换为空,然后您的 txt 文件中的所有空白将被删除。

      这种方法几乎可以满足各种去除。也可以应用于excel或word等。

      祝你好运!

      【讨论】:

      • 这不是推荐的方式,尤其是如果 1. 文件很大 - 您的文本编辑器可能会挂起。 2. 如果您的文件包含不可打印的数据和记事本等编辑器将损坏整个文件,如果保存。 3. 该文件是在运行时生成的,您需要对其进行过滤(在此上下文中删除空格)- 自动;通常在频繁生成文件时很有用。
      • @anishsane 是的,你是对的。但是,如果这只是一些简单的工作,那效果很好。对于不可打印的数据,我们可以复制它并替换(如 TAB 或一些类似星的)。
      • 不可打印的意思是像 ascii 值 > 0x80 或 ascii=0x3 等字符。
      • 此外,由于OP要求cygwin解决方案,当文本编辑器方法对windows用户如此明显时,我推测他想将命令放在脚本中。
      猜你喜欢
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2011-06-08
      • 2023-01-09
      • 2014-01-14
      • 1970-01-01
      相关资源
      最近更新 更多