如何使用grep / awk / sed打印直到某个字符?

问题描述

我是shell脚本的完整入门者,我试图遍历一组JSON文件并尝试从中提取某个字段。每个JSON文件都有一个“ country:” xxx“ 字段。在每个JSON文件中,有10k的同一个字段具有相同的国家/地区名称,因此我只需要第一个匹配项,就可以使用“ -m 1”。

为此,我尝试使用grep,但无法弄清楚如何在首次出现时从每个文件提取包括国家/地区名称在内的整个字段。

for FILE in *.json;
do   
        grep -o -a -m 1 -h -r '"country":"' $FILE;
done

我尝试使用另一个管道并使用以下模式,但它不起作用

| egrep -o '^[^"]+'

实际输出

"country":"
"country":"
"country":"

所需的输出

"country:"romania"
"country:"united kingdom"
"country:"tajikistan"

但是我需要整个东西。任何帮助都会很棒。谢谢

解决方法

关于“我只想要第一次出现”这个问题,有一个通用答案,答案是:

... | head -n 1

这意味着,无论您做什么,都要采取行动(头几行),-n开关使您可以说出想要的数量(在这种情况下为一个)。

可以对最后一次出现执行相同的操作,但是您使用tail而不是head(也可以使用-n开关)。

,

尝试了许多事情之后。我找到了我想要的图案。

grep -Po '"country":.*?[^\\]",' $FILE | head -n 1;