【发布时间】:2019-06-28 15:00:23
【问题描述】:
一般
我正在尝试在特定目录下的数百个 JSON 文件中递归搜索与特定正则表达式匹配的行。
grep -rh 非常适合递归搜索特定行。我在将正则表达式应用于搜索时遇到问题,因为 JSON 文件中的所有行都以 " 开头并以 "、 或 "。
示例:如果我想应用正则表达式来获取所有以 zxc 开头的行,我将无法做到,因为这些行实际上以 "zxc 开头强>
代码
如果行的开头没有",则以下命令将起作用。
/bin/grep -rh -E "^(zxc)" "/etc/json_dir/"
以下命令有效,但我不希望 grep 从所有 JSON 文件中获取数十万行,然后应用正则表达式。
/bin/grep -rh -E ".*" "/etc/json_dir/" | /bin/sed -e 's/^"//g' -e 's/,$//g' -e 's/"$//g' | /bin/grep -E "^(zxc)"
问题
grep 有没有办法忽略开头的 " 字符和行尾的 " 和 ", 字符在应用正则表达式之前?
如果没有办法,有没有办法用其他 bash 命令、perl、python 或其他语言来做到这一点。
【问题讨论】:
-
使用可以正确处理 JSON 的工具。使用
jq而不是grep、sed、awk... -
同意赛勒斯。尽管如此:
grep -E '^"?zxc' ...将在行首处理 optional 引号。