If you're already used too using grep -v "sometring" filename to print everything from a file without the certain grepped string output and you want to do the same to delete lines based on strings without having to output the grepped string to a file and then overwritting the original file:
grep -v 'whatever' filename > filename1
mv filename1 filename
A much better way to delete an whole line containing a string match from a file is to use sed
sed should be the tool of choice especially if you're scripting because sed is especially made for such batch edittings.
Here is how to do delete an entire line based on a given string:
sed –in-place '/some string to search and delete/d' myfilename
It might be a good idea to also create backups just to make sure something doesn't get deleted incidently to do use:
sed –in-place=.bak '/some string to search and delete/d' myfilename
In short to use bash's for loop here is how to backup and remove all lines with a string match within all files within a Linux directory:
for f in *.txt; do sed –in-place '/some string/d'
"$f"; done
find -name '*.txt' -exec sed –in-place=.bak '/some
string/d' "{}" ';'
BTW SED is really rich editor and some people got so much into it that there is even a sed written text (console) version of arkanoid 🙂
If you want to break the ice and get some fun in your boring sysadmin life get sed arkanoid code from here.
I have it installed under pc-freak.net free ASCII Games entertainment service, so if you want to give it a try just login and give a try.
Enjoy 🙂
More helpful Articles
Tags: bak, file, good, life, line, loop, make, match, string, use