질문&답변
클라우드/리눅스에 관한 질문과 답변을 주고 받는 곳입니다.
리눅스 분류

grep으로 패턴이 일치하는 글만 뽑아내기?

작성자 정보

  • 이상헌 작성
  • 작성일

컨텐츠 정보

본문

grep으로 문자열을 찾는데 패턴이 일치하는 라인 전체가 나오네요.

정확하기 패턴이 일치하는 문자열만을 뽑을수는 없을까요?

관련자료

댓글 2

이상헌님의 댓글

  • 이상헌
  • 작성일
소스에서 이미지 주소만 긁어오는 정규식을 만들고 있습니다.
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로 짜시는게 나을지도 모릅니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,138 명
  • 현재 강좌수 :  36,196 개
  • 현재 접속자 :  713 명