过滤掉字符串后的随机用户名

过滤掉字符串后的随机用户名

我有 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” - 仅第一个将被打印

相关内容