How does one do that in grep 3.1?
Searching for whitespace, then a word, then more whitespace works just fine, but grepping for a word, whitespace and then another word fails.
$ grep '[[:space:]]replication[[:space:]]' pg_hba.conf
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
$ grep 'host[[:space:]]replication' pg_hba.conf
$
The output of the first command demonstrates that there are lines in pg_hba.conf with the words host
and replication
.
My goal is to find the lines which have host
, some whitespace and then the word replication
. Not, IOW, the line with "local" in it.
CodePudding user response:
1st solution: With your shown samples please try following grep
code. There are 2 important things you are missing there, 1st: We better use -E
to enable ERE and 2nd: we need to put
after [[:space:]]
since its NOT 1 space occurrence its more than that. So your command would become like:
grep -E 'host[[:space:]] replication' pg_hba.conf
OR in case you want to match for exact word host
then use like:
grep -E '(^|[[:space:]] )host[[:space:]] replication' pg_hba.conf
2nd solution: With awk
also you can try like following, considering if host
is always coming in starting of line and replication
string is always 2nd field/column in your Input_file.
awk '$1=="host" && $2=="replication"' Input_file