Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

How to remove all the lines from the text file containing the words "cat" and "rat"?

share|improve this question
    
This sounds suspiciously like a homework assignment. Please remember to attribute your answer to the nice folks over at Askubuntu. –  zwets Oct 7 '13 at 19:59
    
That a part of the big project, I am new to Linux environment. –  PersonX Oct 7 '13 at 20:05
add comment

2 Answers

up vote 3 down vote accepted

grep approach

To create a copy of the file without lines matching "cat" or "rat", one can use grep in reverse (-v) and with the whole-word option (-w).

grep -vwE "(cat|rat)" sourcefile > destinationfile

The whole-word option makes sure it won't match cats or grateful for example. Output redirection of your shell is used (>) to write it to a new file. We need the -E option to enable the extended regular expressions for the (one|other) syntax.

sed approach

Alternatively, to remove the lines in-place one can use sed -i:

sed -i "/\b\(cat\|rat\)\b/d" filename

The \b sets word boundaries and the d operation deletes the line matching the expression between the forward slashes. cat and rat are both being matched by the (one|other) syntax we apparently need to escape with backslashes.

Tip: use sed without the -i operator to test the output of the command before overwriting the file.

(Based on Sed - Delete a line containing a specific string)

share|improve this answer
    
Thank you much for your detailed explanation!!!!! –  PersonX Oct 7 '13 at 20:11
add comment

To test in terminal only, use:

sed '/[cr]at/d' file_name

To really remove those lines from the file, use:

sed -i '/[cr]at/d' file_name
share|improve this answer
    
Thank you much!!! –  PersonX Oct 7 '13 at 19:55
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.