안녕하세요, 연구에도 불구하고 특정 sed 명령이 수행하는 작업을 해독하려고 노력했지만 당황한 것 같습니다.
sed -E 's/([0-9]+)-([0-9]+)/\2:\1/g'
답변1
귀하의 sed
표현식은 대시 주변의 겹치지 않는 양의 정수 쌍을 모두 바꾸고 대시를 콜론으로 바꾸는 대체입니다.
표정이 바뀔 거야
000-212 444-818
입력하다
212:000 818:444
이러한 (...)
비트는 "캡처 그룹"입니다. 이러한 그룹은 내부 표현식과 일치하는 하위 문자열을 캡처합니다. 그런 다음 이 하위 문자열을 \1
첫 번째 그룹, \2
두 번째 그룹 등에서 사용할 수 있습니다.
캡처 그룹은 모두 [0-9]+
string 과 같이 0에서 9 사이의 비어 있지 않은 숫자 시퀀스와 일치하는 패턴인 을 사용합니다 123000
.
-
두 그룹 사이에서는 데이터의 리터럴 대시가 일치합니다.
대체 문자열은 일치하는 숫자 그룹을 사용하지만 일치된 숫자의 역순으로 사용하여 교환합니다. 숫자 :
사이에도 대체 텍스트가 삽입됩니다 -
.
마지막으로 /g
, sed
데이터에서 겹치지 않는 모든 일치 항목이 반복적으로 대체됩니다.
유틸리티에서 비표준 -E
옵션을 사용하도록 설정sed
확장하다BRE(기본 정규 표현식) 대신 정규 표현식(ERE)이 사용됩니다 sed
. ERE에서는 캡처 그룹이 작성되는 (...)
반면 BRE는 \(...\)
. BRE는 또한 +
비어 있지 않은 일치하는 표현식 시퀀스를 지정할 필요가 없습니다 \{1,\}
.
따라서 명령을 이식 가능한 것으로 작성할 수도 있습니다.
sed 's/\([0-9]\{1,\}\)-\([0-9]\{1,\}\)/\2:\1/g'
또는
sed 's/\([0-9][0-9]*\)-\([0-9][0-9]*\)/\2:\1/g'