문자열을 필터링한 후 임의의 사용자 이름

문자열을 필터링한 후 임의의 사용자 이름

이 정보가 많이 포함된 API 상태의 전체 목록이 있습니다. 다른 파일이나 변수로 보낼 수 있도록 사용자 이름의 이름을 grep해야 합니다.

예를 들어:

[{"id":"1onyc4b1otgmtrmw37h83rjs9w","create_at":1542718790947,"update_at":1542728017634,"delete_at":0,"username":"ivan.ivanov","auth_data":"".

"username" 다음에 문자열을 가져와야 합니다. 결국에는 다음과 같은 문자열만 있습니다.이반 이바노프아니면 이름이 무엇이든간에.

답변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"을 제거하세요. 첫 번째 사용자 이름만 인쇄됩니다.

관련 정보