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

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

12 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

  3. Hello…i wanaa remove from k__ to c__ from all line in my file…for example as it below

    k__Bacteria;p__Acidobacteria;c__Chloracidobacteria 0.0 0.0 0.054 0.52
    k__Bacteria;p__Acidobacteria;c__PAUC37f 0.0 0.0 0.0 0.0
    ……………..
    and after removal it suppose to be like below
    Chloracidobacteria 0.0 0.0 0.054 0.52
    PAUC37f 0.0 0.0 0.0 0.0
    ………
    please can someone help me how to do this..
    Thanks in advance
    Khem
    …….

Leave a Comment