sed删除空格


28

有谁知道如何使用Sed删除文本文件中的所有空格?我一直在尝试使用“ d”删除命令来执行此操作,但似乎无法弄清楚

Answers:


35

什么样的“空间”?

“删除所有空格”可能意味着不同的事情之一:

  1. 删除所有出现的空格字符code 0x20
  2. 删除所有水平空间,包括水平制表符“ \t
  3. 删除所有空格,包括换行符,“ \n”和其他

正确的工作工具

如果sed出于某种隐藏原因而不是必需的,则最好使用正确的工具来完成工作。

该命令tr主要用于将字符列表转换为其他字符列表(因此称为“ tr”)。作为特殊情况,它可以转换为空字符列表;选项-d--delete)将删除列表中出现的字符。

字符列表可以在[:...:]语法中使用字符类。

  1. tr -d ' ' < input.txt > no-spaces.txt
  2. tr -d '[:blank:]' < input.txt > no-spaces.txt
  3. tr -d '[:space:]' < input.txt > no-spaces.txt

当坚持 sed

使用sed时,[:...:]需要将字符类的语法与regexps中的字符集的语法结合使用[...],从而导致有些混乱[[:...:]]

  1. sed 's/ //g' input.txt > no-spaces.txt
  2. sed 's/[[:blank:]]//g' input.txt > no-spaces.txt
  3. sed 's/[[:space:]]//g' input.txt > no-spaces.txt

1
+1,适合空格的POSIX表示法是空格。
Avinash Raj 2014年

1
将tr用于此任务的绝佳提示,效果很好。我唯一需要调整的是tr会从stdin读取输入,因此对我有用的是tr -d ' ' < input.txt > no-spaces.txt

@Sky的注释可在我的macOS中使用(未在Linux中测试)。也许答案应该更新?
iplus26 '16

非常感谢@Sky,这确实是一个严重的错误。我现在将修复三行tr。(您在其他地方看到了吗?)
Volker Siegel

7

您可以使用它来删除中的所有空格file

 sed -i "s/ //g" file

2
没有骰子。我也尝试过类似的方法。不起作用
贾斯汀

您要删除空格或制表符吗?
赛勒斯(Cyrus)2014年

1
删除空格
Justin

2
一个简单的测试:man sed | sed "s/ //g"
Cyrus 2014年

1
@starscream_disco_party:一样。您可以用/不同的字符替换所有3 个字符,例如:sed "ss ssg"
Cyrus
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.