리눅스 분류
grep으로 패턴이 일치하는 글만 뽑아내기?
작성자 정보
- 이상헌 작성
- 작성일
컨텐츠 정보
- 1,588 조회
- 2 댓글
- 0 추천
- 목록
본문
grep으로 문자열을 찾는데 패턴이 일치하는 라인 전체가 나오네요.
정확하기 패턴이 일치하는 문자열만을 뽑을수는 없을까요?
관련자료
-
이전
-
다음
댓글 2
이상헌님의 댓글
- 이상헌
- 작성일
소스에서 이미지 주소만 긁어오는 정규식을 만들고 있습니다.
shell 스크립트로 작성중이구요..
man으로보니 -o 옵션이 있네요.. 그런데.. 이미지 테그가 가 같은줄에 붙어나오면 이어져서 뒤에 나오네요..
정확하게 html에서 이미지 주소만 뽑으려면 어떻케하면 좋을까요?
shell 스크립트로 작성중이구요..
man으로보니 -o 옵션이 있네요.. 그런데.. 이미지 테그가 가 같은줄에 붙어나오면 이어져서 뒤에 나오네요..
정확하게 html에서 이미지 주소만 뽑으려면 어떻케하면 좋을까요?
정원용님의 댓글
- 정원용
- 작성일
grep은 기본적으로 줄단위기 때문에, 패턴으로 잘라내야 합니다.
한번 만들어봤는데 사용된 로직은 간단합니다.
1. 일단 grep으로 태그라고 생각되는 것은 무조건 한줄단위로 자릅니다.
sed -r 's/>/>
/g'
2. img태그로 시작되고 한줄로 모두 기술된(중간에 엔터가 들어가거나 해서 태그가 깨진것은 제외합니다.) 것을 찾습니다.
grep -E "<img[^>]*>"
3. img태그에서 src= 뒤에 지정된 소스를 뽑아옵니다. 이 때 주의할점은 상대주소로 지정된 이미지는 뽑지 않습니다.(호스트 네임이 없으므로 알기도 힘들어서...)
sed -r 's/.*<img[^>]*src=.*(http[^"''']+)[^>]*>*[^<]*/1/g'
합치면 다음과 같이 됩니다. a.html이 HTML소스입니다.
cat a.html | sed -r 's/>/>
/g' | grep -E "<img[^>]*>" | sed -r 's/.*<img[^>]*src=.*(http[^"''']+)[^>]*>*[^<]*/1/g'
조금 손보시면 쓸만하게 될지도 모르겠네요.
아 너무 큰 사이즈(몇백메가)나 동시변환 부하가 크다면 한참 걸릴겁니다. 서비스에 사용하시려면 좀 다른 방법이나 C로 짜시는게 나을지도 모릅니다.
한번 만들어봤는데 사용된 로직은 간단합니다.
1. 일단 grep으로 태그라고 생각되는 것은 무조건 한줄단위로 자릅니다.
sed -r 's/>/>
/g'
2. img태그로 시작되고 한줄로 모두 기술된(중간에 엔터가 들어가거나 해서 태그가 깨진것은 제외합니다.) 것을 찾습니다.
grep -E "<img[^>]*>"
3. img태그에서 src= 뒤에 지정된 소스를 뽑아옵니다. 이 때 주의할점은 상대주소로 지정된 이미지는 뽑지 않습니다.(호스트 네임이 없으므로 알기도 힘들어서...)
sed -r 's/.*<img[^>]*src=.*(http[^"''']+)[^>]*>*[^<]*/1/g'
합치면 다음과 같이 됩니다. a.html이 HTML소스입니다.
cat a.html | sed -r 's/>/>
/g' | grep -E "<img[^>]*>" | sed -r 's/.*<img[^>]*src=.*(http[^"''']+)[^>]*>*[^<]*/1/g'
조금 손보시면 쓸만하게 될지도 모르겠네요.
아 너무 큰 사이즈(몇백메가)나 동시변환 부하가 크다면 한참 걸릴겁니다. 서비스에 사용하시려면 좀 다른 방법이나 C로 짜시는게 나을지도 모릅니다.