≡ Menu

sed tip: Remove / Delete All Leading Blank Spaces / Tabs ( whitespace ) From Each Line

The sed (Stream Editor) is very powerful tool. Each line of input is copied into a pattern space. You can run editing commands on each input line to delete or change the input. For example, delete lines containing word DVD, enter:
cat input.txt | sed ‘/DVD/d’

To Print the lines between each pair of words pen and pencil, inclusive, enter:
$ cat input.txt sed -e '/^PEN/,/^PENCIL/p'

To remove all blank lines, enter:
$ cat /etc/rssh.conf | sed '/^$/d' > /tmp/output.file

sed is very handy tool for editing and deleting unwanted stuff. Following echo statements printed lots of whitespace from left side:
echo "     This is a test"
Output:

         This is a test

To remove all whitespace (including tabs) from left to first word, enter:
echo "     This is a test" | sed -e 's/^[ \t]*//'
Output:

This is a test

Where,

  • s/ : Substitute command ~ replacement for pattern (^[ \t]*) on each addressed line
  • ^[ \t]* : Search pattern ( ^ – start of the line; [ \t]* match one or more blank spaces including tab)
  • // : Replace (delete) all matched pattern

Following sample script reads some data from text file and generate a formatted output. It delete all leading whitespace from front of each line so that text get aligned to left:

#!/bin/bash
FILE=url.dump.txt
DOMAIN=yourdomain.com
exec 3<&0
exec 0<$FILE
while read line
do
	url=$(echo "http://${DOMAIN}${line}")
        title="$(lynx -dump -source ${url} | grep '<title>' | awk -F '<title>' '{ print $2 }' | cut -d'<' -f1|sed 's/^[ \t]*//')"
        echo "<li>${title}</li>"
done
exec 0<&3

To delete trailing whitespace from end of each line, enter:
$ cat input.txt | sed 's/[ \t]*$//' > output.txt
Better remove all leading and trailing whitespace from end of each line:
$ cat input.txt | sed 's/^[ \t]*//;s/[ \t]*$//' > output.txt

Share this on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:



{ 14 comments… add one }
  • Hannes December 30, 2007, 2:54 pm

    http://sed.sourceforge.net/sed1line.txt is a very handy document for sed too.

  • nixCraft December 30, 2007, 4:16 pm

    Thanks for sharing the link

  • Bijay Rungta December 26, 2008, 10:23 am

    Another great resource:
    A list of Commands very well written
    http://student.northpark.edu/pemente/sed/sed1line.txt

  • Anton March 23, 2009, 12:21 pm

    Please stop masturbating and use expand/unexpand.

  • dmadden January 27, 2010, 9:51 am

    Some nice examples, but there’s unnecessary use of a cat process for the examples with input.txt. For example,
    cat input.txt | sed ‘/DVD/d’ is more efficient as sed ‘/DVD/d’ input.txt
    $ cat input.txt sed -e ‘/^PEN/,/^PENCIL/p’ is more efficent as sed -e ‘/^PEN/,/^PENCIL/p’ input.txt

  • tjac March 7, 2011, 10:02 pm

    perl -pi -e ‘s,[\r\n],,g’ file.xml

  • Naren April 5, 2011, 12:50 pm

    Thanks for sharing …

  • yesuf September 9, 2011, 1:56 pm

    better example yet….

    cat /usr/bin/scrub
    # Remove all comments and empty lines
    sed -e ‘s/#.*//’ -e ‘s/[ ^I]*$//’ -e ‘/^$/ d’ $1

    cat /usr/bin/clrspace
    # Remove all leading and trailing whitespace from each line;
    sed ‘s/^[ \t]*//;s/[ \t]*$//’ $1

    now you can simply run
    scrub filename
    clrspace filename

  • Mark March 30, 2012, 11:16 am

    I tried your sed syntax for leading/trailing space/tabs removal and it doesn’t do it as expected:

    # sed s/$/G/g test_file
    /etcG
    /homeG
    /usr/sbin/snapshotsG
    /usr/local/etcG
    /var/spool/cron/crontabsG
    G
    / G
    / /dgdkjgd G
    /G
    / /fff/f/ff G
    G
    /sdfsfssf G
    #/sfsfsfG
    /sfsd/sfd / G
    /sfsd/sfdsfs /dfgf/df/G
    /dfgdg /gddd /G
    # sed ‘s/^[ \t]*//;s/[ \t]*$//’ test_file|sed s/$/G/g
    /etcG
    /homeG
    /usr/sbin/snapshotsG
    /usr/local/etcG
    /var/spool/cron/crontabsG
    G
    /G
    / /dgdkjgd G
    /G
    / /fff/f/ff G
    G
    /sdfsfssfG
    #/sfsfsfG
    /sfsd/sfd / G
    /sfsd/sfdsfs /dfgf/df/G
    /dfgdg /gddd /G
    #

  • Mark March 30, 2012, 11:22 am

    ok, I found another solution for it:

    sed ‘s/^[[:space:]]*//;s/[[:space:]]*$//’

    did the trick.

  • Jimmy7 July 8, 2012, 3:58 pm

    Hi,
    how can I remove spaces at the end of each line in a *.txt file…e.g.
    word1[space]
    word2[space]
    word3[space]
    .
    .
    word n[space]
    commands you stated didnt work

  • Yahia November 28, 2012, 1:08 pm

    sed -i ‘s/\W*$//gi’ FILENAME

  • gg January 31, 2014, 5:51 am

    sed ‘s/[ \t]*$//g’

  • Harris Kool October 23, 2014, 7:53 am

    ls *XONE* | wc -w | sed ‘s/\ *//’

Security: Are you a robot or human?

Leave a Comment


   Tagged with: , , , , , , ,