MOHAMED
MOHAMED

Reputation: 43518

grep regex of 0 or many spaces

I want to make a grep on a file based on a regex.

In the regex, I want to make comparison on a spcace or none space so I tried the following expression: / {0,}/ but it does not work.

Here after my whole regexp

cat test.txt  | grep "\"cache_changes\":/ {0,}/\"xax.yby.zcz[ \"]"

How I can do it?

here after my file test.txt:

{ "nbr": "01", "parameter": "toto.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes":"xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "02", "parameter": "toto.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz xa2x.yb2y.zc2z" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "03", "parameter": "toto.aaa.2.bbb", "value": "45", "notification": "0", "cache_changes": "xa2x.yb2y.zc2z xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "04", "parameter": "toto.ffff.3.bbb", "value": "45", "notification": "0", "cache_changes": "xa2x.yb2y.zc2z xax.yby.zcz xa3x.yb3y.zc3z" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "05", "parameter": "titi.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes": "xdx.yey.zfz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "06", "parameter": "titi.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xdx.yey.zfz xd2x.ye2y.zf2z" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "07", "parameter": "titi.aaa.2.bbb", "value": "45", "notification": "0", "cache_changes": "xd2x.ye2y.zf2z xdx.yey.zfz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "08", "parameter": "titi.ffff.3.bbb", "value": "45", "notification": "0", "cache_changes": "xd2x.ye2y.zf2z xdx.yey.zfz xd3x.ye3y.zf3z" "set_cmd": "any_f xax.yby.zcz $val" }

The desired output is:

{ "nbr": "01", "parameter": "toto.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes":"xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "02", "parameter": "toto.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz xa2x.yb2y.zc2z" "set_cmd": "any_f xax.yby.zcz $val" }

Upvotes: 0

Views: 199

Answers (2)

Stephan
Stephan

Reputation: 43023

Try this command instead:

grep "\"cache_changes\": *\"xax.yby.zcz[ \"]" test.txt

With the test file provided in the question, here is what I get:

{ "nbr": "01", "parameter": "toto.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "02", "parameter": "toto.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz xa2x.yb2y.zc2z" "set_cmd": "any_f xax.yby.zcz $val" }

Upvotes: 1

Avinash Raj
Avinash Raj

Reputation: 174706

Use * (which repeats the previous token zero or more times) instead of the repeatation quantifier {}

$ grep "\"cache_changes\": *\"xax.yby.zcz[ \"]" file
{ "nbr": "01", "parameter": "toto.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "02", "parameter": "toto.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz xa2x.yb2y.zc2z" "set_cmd": "any_f xax.yby.zcz $val" }

If you really want to use that quantifier, you need to escape the braces, like

$ grep '"cache_changes": \{0,\}"xax.yby.zcz[ "]' file
{ "nbr": "01", "parameter": "toto.aaa.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz" "set_cmd": "any_f xax.yby.zcz $val" }
{ "nbr": "02", "parameter": "toto.eeee.1.bbb", "value": "45", "notification": "0", "cache_changes": "xax.yby.zcz xa2x.yb2y.zc2z" "set_cmd": "any_f xax.yby.zcz $val" }

Upvotes: 1

Related Questions