![두 문자열 사이의 텍스트를 추출하는 방법](https://linux55.com/image/212887/%EB%91%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
이와 같은 문자열이 있고 두 문자열 사이의 텍스트를 추출하려고 합니다.
예:
[{a12:12},{b12:1},{m12:34},{b12:2},{k12:45}]
b12
와 사이의 고유한 값을 추출하고 싶은데 },{m12:
원하는 출력은 입니다 1
.
시도했지만 sed
예상한 결과를 얻지 못했습니다. 여러 번 발생했기 때문에 확실하지 않은 경우 b12
조언이 도움이 될 것입니다.
답변1
입력이 유효한 JSON이라고 가정합니다.
[{"a12":12},{"b12":1},{"m12":34},{"b12":2},{"k12":45}]
jq
... key를 사용하여 최상위 배열의 첫 번째 요소를 추출한 b12
다음 해당 요소에서 키 값을 추출하는 데 사용할 수 있습니다 .
jq 'map(select(has("b12"))) | first.b12' file
키 이름을 명령줄 인수로 전달합니다.
jq --arg k 'b12' 'map(select(has($k))) | first[$k]' file
답변2
다음을 지정하여 sed
추출 할 수 있습니다.1
일치 그룹당신이 제공하는 문자열 사이. 그건 그렇고, 당신은 b12
과 사이의 문자열을 원한다고 말했지만 },{m12:
이 경우의 출력은 입니다 :1
. 따라서 실제로 원하는 것은 b12:
과 사이의 텍스트 입니다 },{m12:
.
따라서 코드는 다음과 같아야 합니다.
echo '[{a12:12},{b12:1},{m12:34},{b12:2},{k12:45}]' | sed 's/.*b12:\(.*\)},{m12:.*/\1/'
또는
sed 's/.*b12:\(.*\)},{m12:.*/\1/' <<< '[{a12:12},{b12:1},{m12:34},{b12:2},{k12:45}]'
이 모드는 이전에 가지고 있던 모든 것을 s/.*b12:\(.*\)},{m12:.*/\1/
대체합니다 (b12:
.*b12:) 그리고 그 이후의 모든 항목도 대체됩니다 },{m12:
(},{m12:.*) 일치하는 그룹별. 일치 \(.*\)
그룹(당신의 경우에는1
) 패턴은 \1
이를 나타냅니다.
노트
이 sed
명령을 사용하면 다음과 같은 일이 발생할 수 있습니다."질문". 예를 들어 다음과 같은 추가 콘텐츠가 있는 경우 m12
:
'[{a12:12},{b12:1},{m12:34},{b12:2},{m12:45}]'
'[{a12:12},{b12:1},{m12:34},{b12:2},{m12:10},{m12:45}]'
출력은 (각각) 다음과 같습니다.
2
2},{m12:10
따라서 원하는 것을 수행하는 가장 좋은 방법은 다음을 사용하는 것입니다.코살로난다의 답변