Reputation: 43518
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
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
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