\1 - 이 sed 작업은 무엇을 의미합니까?

\1 - 이 sed 작업은 무엇을 의미합니까?

저는 이 sed 명령을 사용하여 MyKey와 같은 키의 json 값을 추출합니다.

sedPattern='s/^.*"myKey":"\([^"]*\)".*$/\1/'

이와 같은 json 문자열의 경우

{"myKey" : 1, "yourKey": 2}

내가 필요한 것을 반환합니다.

1

그러나 \1위 sed 명령의 작업은 무엇을 의미합니까?

답변1

\([^"]*\)실제로 두 개의 중괄호() 사이에 있는 문자 집합을 정의하므로 중괄호를 \(이스케이프 해야 합니다.\)

\1첫 번째 그룹의 내용입니다.

여러 그룹은 여러 중괄호 쌍 세트를 사용하여 정의할 수 있으며 증분적으로 번호가 지정되고 각 그룹은 \n(예 \1: , \2\3)로 참조될 수 있으므로 이름은 다음과 같습니다.역참조.

답변2

\1\(...\)캡처된 부분 문자열의 첫 번째 집합(즉, 표현식의 첫 번째 집합)에 대한 역참조입니다. 중첩된 그룹이 있는 경우 첫 번째 그룹은 \(표현식의 가장 왼쪽 그룹입니다.

귀하의 예에서는 문자열의 특정 위치에 있는 하위 문자열입니다 [^"]*(큰따옴표가 없는 빈 문자열일 수 있음).

JSON을 구문 분석하는 더 좋고 안전한 방법은 다음과 같은 JSON 인식 도구를 사용하는 것입니다 jq.

jq -r '.myKey' document.json

이를 통해 구조화된 언어를 사용하여 데이터를 추출할 수 있을 뿐만 아니라 추출한 데이터가 JSON으로 인코딩될 수 있도록 보장합니다.

sed네 표정을 알아차렸어별말씀을요1문서를 다음과 같이 다시 작성하지 않는 한 지정된 JSON 문서에서 추출합니다 .

{"myKey":"1","yourKey":2}

이 문서는 두 가지 면에서 다릅니다.

  1. 키와 값 사이의 공백이 다릅니다. 이는 JSON 파서에는 중요하지 않지만 JSON 구조를 이해하지 못하는 라인 기반 도구에는 중요합니다.

  2. 이제 키 값 유형이 myKey숫자가 아닌 문자열입니다. 이는 파서가 값을 처리하는 방법에 따라 중요합니다. 값으로 변환해야 할 수도 있고예상되는문자열이 됩니다. 이는 데이터를 사용하는 애플리케이션에 따라 다릅니다.

또한 문서는 다음과 같습니다.동일한도착하다

{
  "myKey": "1",
  "yourKey": 2
}

JSON 파서는 둘 사이의 차이점을 볼 수 없지만 sed한 문서에서는 무언가를 추출할 수 있지만 다른 문서에서는 추출하지 못할 수도 있습니다.

관련 정보