다음과 같이 ","로 구분된 "key":"value" 쌍을 연결한 문자열이 있습니다.
KEY1:VALUE1, KEY2:VALUE2, KEY3:VALUE3
해당 문자열에서 특정 문자열(예: KEY2)을 grep해야 하므로 명령의 출력은 VALUE2가 되어야 합니다.
답변1
PCRE를 지원하는 구현을 사용하십시오 grep
.
grep -Po '(^|[ ,])KEY1:\K[^,]*'
또는 egrep
및 cut
:
grep -Eo '(^|[ ,])KEY2:[^,]*' | cut -d: -f2-
두 방법 모두 값에 쉼표를 포함할 수 없습니다.
json
예를 들어 적합한 것이 있다면
{ "KEY1":"VALUE1", "KEY2":"VALUE2", "KEY3":"VALUE3" }
당신이 사용할 수있는 jq
:
$ jq .KEY2
"VALUE2"
$ jq -r .KEY2
VALUE2
답변2
일반적인 grep
가정은 VALUE에 콜론이 포함되어 있지 않다는 것입니다.
grep -o 'KEY2:[^,]\+' | grep -o '[^:]\+$'
답변3
awk를 사용하여 키:값 쌍을 레코드로 읽고, 키, 값을 첫 번째 및 두 번째 필드로 읽습니다.
awk -v RS=' *, *' -v FS=' *: *' '$1=="KEY2"{print $2}' <<<$str
-v RS=' *, *'
,
레코드 구분 기호를 주변 공간 으로 설정-v FS=' *: *'
:
필드 구분 기호를 공백과 주변 공백 으로 설정'$1=="KEY2"{print $2}'
키가 발견되면 값을 인쇄합니다. "KEY2"를 원하는 키 값으로 변경하세요.
답변4
grep 값만
printf '%s\n' "$myString" | grep -Po "(?<=KEY2:)[^,]*"
또는
grep -Po "(?<=KEY2:)[^,]*" <<< "$myString"