[정규표현식] Domain 목록 중 2차 Domain만 추출하고 싶습니다.
글쓴이: 자일자일 / 작성시간: 수, 2013/01/02 - 4:31오후
안녕하세요.
dev.www.example.com
www.example.com
mail.example.com
example.com
test.co.kr
example.co.jp
위와 같은 Domain 목록을 다음과 같은 형식으로 변경하고 싶습니다.
example
example
example
example
test
example
Linux Terminal에서 Sed, Perl 같은 프로그램의 정규표현식을 이용해서 변환하고 싶은데
어떻게 하면 좋을지 감이 오지 않네요.
Domain 형식이 일정하면 awk등을 이용하여 특정 필드만 추출하면 간단할텐데
2차 domain부터 4차 domain 까지 다양한 형식이 있어요.
도움 부탁드립니다.
고맙습니다.
Forums:
저건 뒤의 com, co.kr, co.jp 같은
저건 뒤의 com, co.kr, co.jp 같은 example뒤의 도메인 이름을 배열로 넣어서 각각으로 검사해서 잘라야 할듯 한데요...
:%s/\(.*\.\)\?\([^.]\+\)\.\(com\|co\.[a-z]\{2\}\)$/\2/g
:%s/\(.*\.\)\?\([^.]\+\)\.\(com\|co\.[a-z]\{2\}\)$/\2/g
Vim에서라면 저렇게 할 수 있습니다.
.* 아무거나 앞에 오고 \. 마침표가 오는 것을 \(\) 묶음으로 생각하되 \? 찾을 수 있으면 찾고, 못 찾으면 말고
[^.] 마침표가 아닌 것이 \+ 한 번 이상 나오면 \(\) 묶음으로 생각하고
\. 마침표가 온 다음에, com이 오거나 "co. 다음 [a-z] 알파벳이 \{2\} 두 번 나오는 것"이 오거나 하는 것을 \(\) 묶음으로 생각하고
그 다음엔 아무 것도 없이 $ 줄이 끝나는 것을 다른 걸로 / 교체하는데 \2 두 번째 묶음으로 교체하면 나오겠네요.
고맙습니다.
설명해주신 내용처럼 따라 해보니 원하는 결과가 출력되네요.
VIM은 물론, sed에서도 완벽합니다.
-# sed -e 's/\(.*\.\)\?\([^.]\+\)\.\(com\|co\.[a-z]\{2\}\)$/\2/g' example.txt
저는 아직 멀었네요. :(
더 많이 공부해야겠습니다.
고맙습니다.
'www.example.kr' 에서는 다르게 출력되네요.
실제 적용해야 하는 대상에는
example.kr
example.net
example.or.kr 등 몇 개 도메인이 더 포함되어 있어 아래 내용과 같이 변경하였더니
'co.kr' 도메인에서 오류가 발생되네요.
1. sample.txt
[user1@wwwexample tmp]$ cat sample.txt
dev.www.example.com
www.example.com
mail.example.com
example.com
test.co.kr
example.co.jp
example.kr
www.example.kr
dev.www.example.kr
2. example.kr 오류
[root@wwwexample tmp]# cat sample.txt | sed -e 's/\(.*\.\)\?\([^.]\+\)\.\(com\|kr\|co\.[a-z]\{2\}\)$/\2/g'
example
example
example
example
co
example
example
example
example
그래서 아래와 같은 방법을 생각해서 적용하였습니다.
원하는 값이 출력되네요.
다른 나은 방법이 있다면 소개 부탁드려요.
[user1@wwwexample tmp]$ cat sample.txt | sed -e 's/co\.kr/\kr/g' -e 's/\(.*\.\)\?\([^.]\+\)\.\(net\|com\|do\|biz\|or\.[a-z]\{2\}\|kr\|co\.[a-z]\{2\}\)$/\2/g'
example
example
example
example
test
example
example
example
example
고맙습니다.
진지하게 실사용을 고려하고 툴을 만드신다면, 결국 맨
진지하게 실사용을 고려하고 툴을 만드신다면,
결국 맨 처음 답변대로 하실 수 밖에 없을듯요..
유지보수 측면에서라도요..
이렇게
이렇게 하시면
^\.\(com\|org\|net\)$\|^\.\(\(\(co\|or\|ne\)\.\)\?[a-z]\{2\}\)$
.com
.org
.net
.kr
.jp
.de
.co.kr
.or.jp
.ne.de
요거는 다 잡을 수 있고
.ne.bug
요거는 안 잡습니다.
시작이랑 끝이랑 괄호랑 좀 다듬으시면 될 것 같네요.
제목을 수정하여 '완료' 말머리를 달고 싶은데
제목을 수정하여 '완료' 말머리를 달고 싶은데
아무리 찾아봐도 편집/수정 메뉴가 보이질 않습니다.
어렵지 않게 수정할 수 있던걸로 기억하는데
찾을수가 없네요.
댓글 달기