51

Does anyone know how to use Sed to delete all blank spaces in a text file? I haven been trying to use the "d" delete command to do so, but can't seem to figure it out

3 Answers 3

58

What kind of "space"?

To "delete all blank spaces" can mean one of different things:

  1. delete all occurrences of the space character, code 0x20.
  2. delete all horizontal space, including the horizontal tab character, "\t"
  3. delete all whitespace, including newline, "\n" and others

The right tool for the job

If sed it not a requirement for some hidden reason, better use the right tool for the job.

The command tr has the main use in translating (hence the name "tr") a list of characters to a list of other characters. As an corner case, it can translate to the empty list of characters; The option -d (--delete) will delete characters that appear in the list.

The list of characters can make use of character classes in the [:...:] syntax.

  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

When insisting on sed

With sed, the [:...:] syntax for character classes needs to be combined with the syntax for character sets in regexps, [...], resulting in the somewhat confusing [[:...:]]:

  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
5
  • 1
    +1, POSIX notation for a blank space is the appropriate way to go. Oct 19, 2014 at 2:26
  • 1
    Great hint to use tr for this task, works great. Only thing I had to adjust was that tr reads input from stdin, so what worked for me was tr -d ' ' < input.txt > no-spaces.txt.
    – Sky
    Sep 4, 2016 at 18:50
  • @Sky's comment works in my macOS (not tested in Linux). Maybe the answer should be updated?
    – iplus26
    Nov 13, 2016 at 8:16
  • Thank a lot @Sky, that's indeed a bad error. I'll fix the three lines with tr now. (Do you see it anywhere else?) Nov 15, 2016 at 23:20
  • Note that even [:space:] does not strip all unicode spaces. Apr 29, 2021 at 21:10
10

You can use this to remove all whitespaces in file:

 sed -i "s/ //g" file
6
  • 3
    No dice. I've tried a similar approach too. Doesn't work
    – Justin
    Oct 16, 2014 at 20:30
  • Do you want to delete whitespaces or tabs?
    – Cyrus
    Oct 16, 2014 at 20:33
  • 1
    delete the whitespace
    – Justin
    Oct 16, 2014 at 20:37
  • 2
    A simple test: man sed | sed "s/ //g"
    – Cyrus
    Oct 16, 2014 at 21:14
  • 1
    @starscream_disco_party: it‘s the same. You can replace all 3/ with a different character, e.g.: sed "ss ssg"
    – Cyrus
    Apr 20, 2017 at 5:17
3

perhaps this way too late, but sed takes regular expression as input. '\s' is the expression of all whitespaces. So sed s/'\s'//g should do the job. cheers

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.