텍스트 파일의 특정 줄에서 버전을 추출하여 명령으로 사용하고 싶습니다.

텍스트 파일의 특정 줄에서 버전을 추출하여 명령으로 사용하고 싶습니다.

예를 들어 "somefile.json" 파일의 텍스트는 다음과 같습니다.

{
  "dependencies": {
    "name1": "text1#version1",
    "name2": "text2#version2",
    "name3": "text3#version3"
  },
  "wont-need-to-get-versions-from-here": [
    {
      "randomtext": "randomtext",
      "randomurl": "randomurl",
      "scopes": [
        "randomscope"
      ]
    }
  ]
}

"version2"나는 의 도움을 받아 "name2"명령이 이면 명령의 확장으로 사용하고 싶습니다 . "command"그것을 얻은 후에 "version2"는 이어야 합니다 "command#version2". 어쩌면 이 명령과 추출을 "version2"일부 .sh 파일에 기록해야 할까요? (멍청한 질문이었다면 죄송합니다)

답변1

문자열 name2command가 찾고 있는 명령에 대한 두 개의 입력이고 질문의 문서가 제공되면 command#version2이 문자열을 사용하여 쿼리 결과를 얻고 싶다고 가정합니다.

jq명령은 JSON 문서를 쿼리하거나 수정하는 데 사용됩니다. 다음 명령은 dependencies키가 문자열 name2(또는 쉘 변수에 문자열로 지정된 모든 항목 key)에 해당하는 하위 개체에서 값을 추출합니다. 첫 번째 문자 #앞의 값 부분을 command(또는 쉘 변수에 지정된 모든 것 cmd)로 대체합니다. 필요한 경우 결과 문자열이 디코딩되어 표준 출력 스트림으로 인쇄됩니다.

key='name2'
cmd='some command'

jq -r --arg key "$key" --arg cmd "$cmd" \
    '.dependencies[$key] // empty | sub("^[^#]*"; $cmd)' somefile.json

문제의 문서가 주어지면 위의 내용이 생성됩니다.

some command#version2

dependencies하위 개체의 키가 지정된 값과 일치하지 않으면 이 $key명령은 출력을 생성하지 않습니다.

답변2

가치를 얻으세요 text2#version2:

jq -r '.dependencies.name2' somefile.json
text2#version2

두 번째 필드를 잘라냅니다 version2.

jq -r '.dependencies.name2' somefile.json | cut -d# -f2
version2

주문 실행 command#version2:

exec command#$(jq -r '.dependencies.name2' somefile.json | cut -d# -f2)

쉘 프로세스를 유지하려면 exec.eval

관련 정보