常规
我正在尝试在特定目录下的数百个JSON文件中递归搜索与特定正则表达式匹配的行。
grep -rh 非常适合递归搜索特定行。我在搜索中应用正则表达式时遇到问题,因为JSON文件中的所有行均以“ 开头,并以”,或“ < / strong>。
示例:如果我想使用正则表达式来获取所有以 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或某些其他语言来做到这一点。
答案 0 :(得分:0)
如果我正确理解了您的问题,则可以选择awk
:
awk '{gsub(/^"|"$/,"") } # this part removes all the "s from the start and end of line
/^WHAT/ { print } # or any other processing
' **/*.json
注意:**/*
需要globestar
中的bash
递归glob选项。
在Ideone上查看它的运行情况。
您可以将其缩短为:
awk '/^"?WHAT/' **/* # this executes the default printing action
但是awk|sed|grep
可能不是搜索JSON的正确工具。