【问题标题】:grep regex of 0 or many spaces0 个或多个空格的 grep 正则表达式
【发布时间】:2015-01-20 09:52:48
【问题描述】:

我想根据正则表达式对文件进行 grep。

在正则表达式中,我想在空格或无空格上进行比较,所以我尝试了以下表达式:/ {0,}/ 但它不起作用。

在我的整个正则表达式之后

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

我该怎么做?

在我的文件 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" }

想要的输出是:

{ "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" }

【问题讨论】:

  • 请在问题中包含您想要的输出。解析 JSON,不要使用grep,使用jq

标签: regex linux bash shell grep


【解决方案1】:

试试这个命令:

grep "\"cache_changes\": *\"xax.yby.zcz[ \"]" 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" }

【讨论】:

  • 你不应该将cat与可以读取数据的程序一起使用,比如grep。
【解决方案2】:

使用*重复前一个标记零次或多次)而不是重复量词{}

$ 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" }

如果你真的想使用那个量词,你需要转义大括号,比如

$ 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" }

【讨论】:

  • 什么意思?我认为问题主要出在您的命令本身。我只是用*替换你输入中的{0,}
  • grep '"cache_changes":/ \{0,\}/"xax.yby.zcz[ "]' file
  • 我会把我的文件内容放在问题里,你可以试试你的命令,你会发现什么都不会显示
  • @MOHAMED "xax之前没有正斜杠
猜你喜欢
  • 2011-05-13
  • 2012-07-13
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
相关资源
最近更新 更多