Hauge.txt
[email protected]
[email protected]
[email protected];es
[email protected]
[email protected]
@pepito.com
이메일 추출은 그룹 없이도 작동합니다.
$ cat hoge.txt | sed -nr '/[^@]+@[^.]+\.com$/p'
[email protected]
[email protected]
cat hoge.txt | sed -nr 's/[^@]+@[^.]+\.com$/hoge/p'
-----
hoge
hoge
단, 그룹이 포함된 이메일에서는 사용자 이름 부분을 추출할 수 없습니다.
cat hoge.txt | sed -nr 's/\([^@]+\)@[^.]+\.com$/hoge/g'
---
(nothing matches)
cat hoge.txt | sed -nr 's/\([^@]+\)@[^.]+\.com$/\1/p'
-----
sed: -e expression #1, char 28: invalid reference \1 on `s' command's RHS
뭐가 문제 야?
답변1
이 답변은 주로 GNU에 대한 것입니다 sed
.
내부에GNU 매뉴얼sed
정규식 구문 및 사용법에 대한 설명이 있습니다 .
5.2 기본(BRE) 및 확장(ERE) 정규식
기본 정규식과 확장 정규식은 패턴을 지정하는 구문의 두 가지 변형입니다. BRE(기본 정규 표현식) 구문은 sed(및 grep에서도 유사)의 기본 구문입니다. ERE(확장 정규식) 구문을 활성화하려면 POSIX 지정 -E 옵션(-r, --regexp-extended)을 사용하세요.
GNU sed에서 기본 정규식과 확장 정규식의 유일한 차이점은 "?", "+", 괄호, 중괄호("{}") 및 "|"와 같은 일부 특수 문자의 동작입니다.
기본(BRE) 구문의 경우 이러한 문자는 앞에 백슬래시('\')가 없으면 특별한 의미가 없습니다. 확장(ERE) 구문의 경우에는 그 반대입니다. 이러한 문자는 앞에 백슬래시(')가 없으면 특수합니다. \')는 접두사입니다.
따라서 BRE를 사용하는지 ERE를 사용하는지에 따라 원하는 결과를 얻으려면 구문을 조정해야 합니다.
갈아 바수다:
$ sed -n 's/\([^@]\+\)@[^.]\+\.com$/\1/p' hoge.txt
tsar
cm_
긴급 상황:
$ sed -nE 's/([^@]+)@[^.]+\.com$/\1/p' hoge.txt
tsar
cm_
지금사용할 필요는 없습니다cat
다른 유틸리티 와 마찬가지로 sed
명령 끝에 파일을 참조하면 됩니다.