저는 현재 최신 릴리스 버전의 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': 대체 값.
/
: 사용될 패턴 및 대체 구분 기호입니다..*"([^"]+)".*
:정규식을 설명하는 가장 좋은 방법은 그림을 사용하는 것입니다.
기본적으로 두 개의 따옴표 블록이 있는 모든 줄을 일치시키고 첫 번째 그룹 안에 두 번째 따옴표(따옴표 제외)를 넣습니다./
: 정규식과 대체식 사이의 구분자\1
1.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
이제 두 번째 사람에게 전화하세요.폰트