Linux / Unix sed: Delete Word From File / Input

Posted on in Categories last updated September 15, 2012

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

10 comment

  1. 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’

  2. #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

    1. ****** 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

Leave a Comment