나는 예부터 시작하는 것이 가장 좋다고 생각합니다.
> echo "[20-20:10]Something" | sed -r -e 's/^\[[0-9\:\-]+(.*)$/\1/'
]Something
> echo "[20-20:10]Something" | sed -r -e 's/^\[[0-9\-\:]+(.*)$/\1/'
-20:10]Something
유일한 차이점은 정규식 문자 클래스에서 및 문자를 바꿨다는 것입니다 :
. -
그렇다면 sed의 정규식 문자 클래스에서 문자 순서가 중요합니까? 다음과 같은 다른 정규식 시스템에서는 나에게 중요하지 않은 것 같습니다.https://regex101.com/.
Google에서 이 동작에 대한 정보를 찾을 수 없지만 내 스크립트의 기능을 확실히 알고 싶기 때문에 더 자세히 알고 싶습니다.
답변1
몇 가지 규칙이 있습니다. 이 경우 중요한 것은 이것이 범위 작업이므로 클래스 내부가 아니라 -
말할 수 있다는 것입니다 . a를 리터럴 문자로 포함하려면 클래스의 마지막 문자인 것이 가장 쉽지만 범위의 첫 번째 문자이거나 끝 문자일 수 있습니다.a-f
abcdef
-
문자 집합을 부정하려면 첫 번째 문자가 이어야 합니다 ^
. 텍스트로 포함하려면 첫 번째 텍스트가 아니어야 합니다.
클래스가 끝나면 첫 번째( 또는 ]
첫 번째 문자가 클래스를 무효화하는 경우 두 번째), 4개 문자 그룹 정도가 될 수 있는 특별한 경우가 있습니다 .^
[]abc]
a
b
c
]
답변2
[0-9\:\-]
예 , 숫자, 백슬래시, 콜론 또는 대시 내의 단일 문자는 일치하지만 [0-9\-\:]
대시 는 일치하지 않으므로 이는 중요합니다 . 두 번째 표현식에서 대시는 백슬래시 문자와 백슬래시 문자 사이의 범위를 나타내며(백슬래시는 문자 클래스인 리터럴입니다) 표현식은 와 동일 [0-9\:]
합니다 [\0-9:]
.
정말 대시아니요^
문자 클래스에서 첫 번째(아마도 나중) 또는 마지막인 경우 문자 시퀀스를 나타냅니다.
또한 sed
귀하가 링크한 사이트가 명시적으로 지원하지 않는 POSIX 정규식을 처리한다는 점에 유의하세요.내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?).