我有 API 状态的完整列表,其中包含大量此类信息。我需要 grep 用户名的名称,以便可以将其发送到另一个文件或变量。
例如:
[{"id":"1onyc4b1otgmtrmw37h83rjs9w","create_at":1542718790947,"update_at":1542728017634,"delete_at":0,"username":"ivan.ivanov","auth_data":"".
我需要 grep “用户名”之后的字符串:最后只有伊万·伊万诺夫或者无论名字是什么。
答案1
如果这是一个正确的 json 字符串,您可以使用以下命令解析它jq
:
your_api_call | jq -r '.[]["username"]'
或者
jq -r '.[]["username"]' file
但您提供的字符串不是正确的 json。它]}
末尾缺少右括号 ( ),而是用 a.
代替。
jq
应该在大多数包管理器中可用,例如使用以下命令安装它:
sudo apt install jq
如果你以某种方式需要使用grep
和拥有pgrep
/grep -P
可用:
grep -Po '"username":"\K[^"]*'
答案2
我使用了以下命令并且运行良好:
echo "[{"id":"1onyc4b1otgmtrmw37h83rjs9w","create_at":1542718790947,"update_at":1542728017634,"delete_at":0,"username":"ivan.ivanov","auth_data":""." |
sed "s/,/\n/g" |
awk -F ":" '/username/{print $NF}'
输出
ivan.ivanov
答案3
或者你可以这样做JTC:
bash $ jtc -w'<username>l+0' your.json
"ivan.ivanov"
bash $
如果您的 json 有多个用户名,则所有用户名都将被打印,否则(如果您只需要一个)删除“+0” - 仅第一个将被打印