首页 > 解决方案 > 如何使用 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"

但我需要整件事。任何帮助都会很棒。谢谢

标签: bashshellgrep

解决方案


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

... | head -n 1

这意味着,无论你做什么:拿头(第一行),-n开关让你可以说出你想要多少(在这种情况下是一个)。

对于最后一次出现的情况也可以这样做,但随后您使用tail代替head(您也可以使用-n开关)。


推荐阅读