Grep在应用正则表达式之前会忽略特殊字符

时间:2019-06-28 15:00:23

标签: json bash shell grep

常规

我正在尝试在特定目录下的数百个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或某些其他语言来做到这一点。

1 个答案:

答案 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的正确工具。