확장 RegExp를 사용한 Sed 명령 이해

확장 RegExp를 사용한 Sed 명령 이해

저는 현재 최신 릴리스 버전의 docker-compose.

curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | sed -E 's/.*"([^"]+)".*/\1/'

이것은 내 코드가 아닙니다. 복사해서 붙여넣었는데 효과가 있어서 더 배우고 싶었어요. 특히 저는 이 명령에 관심이 있습니다 sed. 누구든지 내가 더 잘 이해하도록 도와줄 수 있나요?

sed -E 's/.*"([^"]+)".*/\1/'

기본적으로 나는 어떤 문자열도 이해하지 못합니다. 나는 이러한 항목을 개별적으로 알고 있습니다( .*= 모든 문자 또는 문자, [^"]= 알려지지 않은 모든 항목 허용 "). 하지만 이런 식으로 작성하면 어떻게 작동하는지 잘 모르겠습니다.

명령이 없는 명령 출력 sed:"tag_name": "1.22.0",

명령의 출력은 다음과 같습니다 sed.1.22.0

답변1

sed -E 's/.*"([^"]+)".*/\1/

  • -E: sed확장 정규식을 사용합니다.
  • 's': 대체 값.
  • /: 사용될 패턴 및 대체 구분 기호입니다.
  • .*"([^"]+)".*:정규식을 설명하는 가장 좋은 방법은 그림을 사용하는 것입니다.
    정규식 마이그레이션
    기본적으로 두 개의 따옴표 블록이 있는 모든 줄을 일치시키고 첫 번째 그룹 안에 두 번째 따옴표(따옴표 제외)를 넣습니다.
  • /: 정규식과 대체식 사이의 구분자
  • \11.22.0:이 예에서는 원래 행을 그룹 번호 1로 바꿉니다.
  • /: 마지막 구분 기호 뒤에는 옵션이 없으므로 한 줄에 한 번만 교체됩니다.

이것이 충분히 설명되기를 바랍니다.
보다 시각적인 방법으로 정규식을 읽어야 하는 경우 다음을 사용할 수 있습니다.웹사이트 정규 표현식정말 대단해요.

답변2

나는 당신이 무엇을 알고 있는지 모르겠습니다 sed. 존재하다sed(1)다음을 찾을 수 있습니다.

sed - 텍스트 필터링 및 변환을 위한 스트림 편집기

그리고:

-E,-r,--regexp-extended

        스크립트에서 확장 정규식을 사용합니다(이식성을 위해 POSIX 사용 -E).

sed정의할 수 있습니다 .폰트대괄호 사이에는 \(백슬래시) 뒤에 숫자를 입력하여 바꿀 수 있습니다. 귀하의 질문에 다음과 같이 작성하겠습니다.

echo '"tag_name": "1.22.0"' | sed -E 's/"([a-z]+\_[a-z]+)": "([0-9\.]+)"/\2/'
  • -E확장 정규식 사용
  • 's/Part1/Part2/주요 구조
  • "정규식 패턴은 다음으로 시작합니다."
  • ([a-z]+\_[a-z]+)첫 번째폰트문자 연결의 두 부분을 포함합니다._
  • ": "그러면 이러한 시퀀스 기호가 나타납니다.
  • ([0-9\.]+)두번째폰트하나 이상의 숫자를 포함합니다..
  • "패턴은 그것으로 끝납니다.
  • \2이제 두 번째 사람에게 전화하세요.폰트

관련 정보