Linux / Unix sed: Delete Word From File / Input

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, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

Share this on (or read 12 comments/add one below):

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’

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

  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
    …….

    Have a question? Post it on our forum!