How to find lines matching a pattern and delete them?

In a file with lots of lines I want to delete lines that starts with HERE IT IS.

How can I do this using only command-line tools?


Try sed:

sed -i '/^HERE IT IS/d' <file>

WARNING: Its better to take a backup when using -i switch of sed:

sed -i.bak '/^HERE IT IS/d' <file>

The original file will remain as <file>.bak and the modified file will be <file>.


In addition to the very good grep and sed answers you've received, here are some other tools that can do the same thing:

  • A few Perl ways:

    perl -ne '/^HERE IT IS/ || print' file > newfile
    perl -ne 'print if !/^HERE IT IS/' file > newfile
    perl -ne 'print unless /^HERE IT IS/' file > newfile
    

    You can add the -i switch to any of the examples to edit the file in place:

    perl -i.bak -ne '/^HERE IT IS/ || print' file        
    
  • (g)awk

    awk '!/^HERE IT IS/' file > newfile
    

    Newer versions (4.1.1 and later) of GNU awk (the default awk on Linux) can also edit the file in place:

    gawk -i inplace  '!/^HERE IT IS/' file
    
  • Shell (bash, zsh, ksh, probably others). This is kind of silly though, it can be done but other tools are better.

    while IFS= read -r line; do 
      [[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line"
    done < file > newfile