buydadip
buydadip

Reputation: 9407

grep- using regex to print all lines that do not contain a pattern (without -v)

How can I use regex, with grep, to print all lines that do not contain a pattern. I cannot use -v because I want to implement the regex within a much more complicated one, for which -v would be impractical.

But whenever I try to print lines that do not contain a pattern, I do not get the expected output.

For example, if I have this file:

blah blah blah
hello world
hello people
something

And I want to print all lines that do not contain hello, the output should be:

blah blah blah
something

I tried something like this, but it won't work:

egrep '[^hello]' file

All answers on SO use -v, I can't find one using regex

Upvotes: 2

Views: 3003

Answers (3)

xxxondam
xxxondam

Reputation: 1

This can help you.

grep -E '^[^(hello)]*$' file

Upvotes: 0

Jotne
Jotne

Reputation: 41456

I see you asking for regex, and can not use -v. What about some other program like awk,sed?
If not, does your system not have awk, sed etc?

awk '!/hello/' file

sed '/hello/d' file

sed -n '/hello/!p' file

Upvotes: 1

hwnd
hwnd

Reputation: 70722

You cannot use "whole" words inside of a character class. Your regular expression currently matches any character except: h, e, l, o. You could use grep with the following option and implement Negative Lookahead ...

grep -P '^(?!.*hello).*$' file

Ideone Demo

Upvotes: 5

Related Questions