나는 최근 sed에 대해 읽으면서 이 주제를 발견했습니다. 이 주제를 더 잘 이해하려면 몇 가지 예가 필요합니다.
답변1
정규식의 간격 연산자기본 정규식표준 지원(BRE) sed
은 \{x,y\}
.
동등한 ERE(확장) 또는 PCRE( perl
호환) 연산자(일부 구현에서 사용됨 -r/-E
, -R
/ )는 입니다.-P
sed
{x,y}
정규식의 반복 횟수 범위를 지정하는 데 사용됩니다.
sed 's/<a\{3,12\}>/<b>/'
첫 번째 항목을 바꾼 <
다음 3~12 a
초, 그 >
다음에는 을 (를) 교체합니다 <b>
.
유사한 입력에서는 로 <a> <aa> <aaaa> <aaaaaaaa>
대체됩니다 .<aaaa>
<b>
태그 정규식더 일반적으로 알려진캡처 그룹.
\(...\)
BRE에서는 ERE/PCRE 와 동일하며 (...)
.포착다음과 같이 사용할 수 있는 정규 표현식과 일치하는 텍스트역참조또는 대체. 이러한 제품은 다음 용도로도 사용할 수 있습니다.그룹( \(foo\)*
어떤 수의 foo
s와 마찬가지로).
존재하다:
sed 's/\(.\)\(.\)\(.*\)\2\1/\1\2<\3>\2\1/'
우리에겐 3개가 있어요태그 표현식또한 ~으로 알려진캡처 그룹, 첫 번째로 일치하는 문자( .
단일 문자와 일치하는 데 사용됨) \(.\)
는 으로 표시되고 나중에 정규식에서 참조되며 1
(따라서 첫 번째 문자가 캡처되면 on만 일치됨) 대체에도 사용됩니다.\1
\(.\)
x
\1
x
이와 같이 입력하면 whatever -+foobar+-
정규 표현식이 발견되고 명령 (1:-)(2:+)(3:foobar)(2:+)(1:-)
은 s
이를 로 대체합니다 -+<foobar>+-
.
표준(POSIX) ERE는 역참조( \1
위 정규식에서) 를 지원하지 않으므로 (...)
다음에서만 작동합니다 .그룹( (foo|bar)
또는 에서와 같이 (foo){1,3}
), 일부 구현에서는 이를 확장으로 지원합니다. POSIX 사양의 다음 주요 버전에서는 -E
정규식에 ERE를 사용하는 옵션을 지정합니다. 정규식(역참조)에서는 아직 지원되지 않지만 해당 태그 표현식과 일치하도록 대체 항목이 확장될 예정입니다.sed
\1
\1
s
python
, perl
, PCRE 또는 호환되는 정규 표현식을 사용하면 마커 표현식에 임의의 이름을 지정할 수도 있습니다( 왼쪽에서 오른쪽으로 번호가 매겨진 1
, ... 뿐만 아니라). 2
자세한 내용은 해당 설명서를 참조하세요.