≡ Menu

Linux / Unix sed: Delete Word From File / Input

I‘ve a file as follows:

This is a test.
One bang two three
Foo dang Bar
001 0xfg 0xA
002 0xA foo bar 0xfG
I'm done


How do I delete all “words” from the above file which ends with a particular letter (say ‘g’) in each line? The output should be as follows:

This is a test.
One two three
Foo Bar
001 0xA
002 0xA foo bar
I'm done

How do I delete regex-based word using sed or awk under Linux / Unix like operating systems?

You can use any standard Unix text editing and processing utility to find and replace/delete words from the file.

Sed example

The syntax is:

sed 's/\<word\>//g' input
sed -e 's/\<regex-for-word\>//g' input > output

In this example, delete foo word from input:

echo 'This is a foo test' | sed -e 's/\<foo\>//g'

To delete all words ending with a letter ‘g’ in each line, enter:

sed -e 's/\<[a-zA-Z0-9]*[g|G]\>//g' input

Awk example

The syntax is:

awk '{gsub("word", "");print}' input
awk '{gsub("regex", "");print}' input > output

In this example, delete bar word from input:

awk '{gsub("bar", "");print}' <<< "This is a bar test"

To delete all words ending with a letter ‘g’ in each line using gnu/awk, enter:

awk '{gsub("[a-zA-Z0-9]*[g|G]$", "");print}' input

Or

awk '{gsub("\\<[a-zA-Z0-9]*[g|G]\\>", "");print}' input
Share this tutorial 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:



{ 10 comments… add one }
  • Chris F.A. Johnson September 15, 2012, 3:46 am

    The awk examples do not do what they are supposed to do; they delete all matching strings, not matching words.

    echo 'Tough
    thing
    rough' | awk '{gsub("[a-zA-Z0-9]*[g|G]", "");print}'
    h
    
    h
    

    Tough and rough do not end in ‘g’

    • nixCraft September 15, 2012, 5:33 am
      echo 'Tough
      thing
      rough' | awk '{gsub("[a-zA-Z0-9]*[g|G]$", "");print}'
      

      Yes, $ missing at the end of regex. The faq has been updated. Thanks for the head up.

  • Jalal Hajigholamali September 15, 2012, 4:55 am

    Hi,
    Very useful article.
    Thanks a lot…

  • Logicos September 15, 2012, 9:24 pm
    sed 's/[^ ]*g//gi' input
    
    This is a test.
    One  two three
    Foo  Bar
    001  0xA
    002 0xA foo bar 
    I'm done
    
    • nixCraft September 16, 2012, 4:45 am

      Thanks for sharing the nifty regex :)

  • Abdul Kadir October 4, 2012, 10:24 am

    Thanks a lots…….

  • Holley November 9, 2014, 11:52 am

    Interesting article, I think it’s likely to prove helpful in the long run with my work.

  • w4rb0y February 7, 2016, 9:39 am

    #cat test.txt
    One two three
    Foo Bar
    001 0xA
    002 0xA foo bar
    I’m done

    #cat test.txt | sed ‘s/[^[:blank:]]*[gG][^[:blank:]]*//g’

    One two three
    Foo Bar
    001 0xA
    002 0xA foo bar
    I’m done

    • w4rb0y February 7, 2016, 5:02 pm

      ****** Correction to my above mistake******

      #cat test.txt

      This is a test.
      One bang two three
      Foo dang Bar
      001 0xfg 0xA
      002 0xA foo bar 0xfG
      I’m done

      #cat test.txt | sed ‘s/[^[:blank:]]*[gG][^[:blank:]]*//g’

      One two three
      Foo Bar
      001 0xA
      002 0xA foo bar
      I’m done

  • DodoGTA February 27, 2016, 4:18 pm

    Thanks! (I needed to add in-place editing for my case in sed example, however)

Security: Are you a robot or human?

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">


   Tagged with: , , ,