[완료]sed 로 원하는 주소만 추출하기.
글쓴이: nice72 / 작성시간: 수, 2008/07/09 - 3:25오후
고수님들의 조언 부탁합니다.
아래와 같이 문자열이 있을때..
a href="http://dn-naverdic.ktics.co.kr/naverdic/f53462a8a09d72dcc2656dae898259fa/48745919/naverdic/eedic/25/25991.mp3" class="play"img src="http://static.naver.com/dic/tts/btn_listen.gif" width="67" height="22" alt="��������"
이 부분만..
http://dn-naverdic.ktics.co.kr/naverdic/f53462a8a09d72dcc2656dae898259fa
/48745919/naverdic/eedic/25/25991.mp3
추출할 수 있는 sed 명령어 형식이 있을까요?.
즉.. http부터 mp3까지만..manual부터 예제를 찾아봤지만..모두 실패했습니다.
콘솔에서 사전을 찾고 발음까지 들으려하니..어렵네요..
아시는분 있으시면 답변주세요..감사합니다.
Forums:
sed -ne
sed -ne "s/.*\(http:\/\/.*\.mp3\).*/\1/p" textfile
함 해보세요
음...감사합니다..거의 될것 같습니다.
시험해보니..
원하는 양식은 맞는데.. mp3 뒤에
��������">
이게 붙어 있었습니다. 한번 더 부탁드립니다.
양식이 꼭 a href=" "
양식이 꼭 a href=" " 이런식으로 되어있다면
sed -ne "s/.*a href=\"\([^\"]\+\).*/\1/p"
이런 식으로 a href="..." 안의 문자를 뽑아올 수도 있습니다
마찬가지 입니다..쩝.
아래 콘솔용 사전 스크립트입니다.
직접 시험해보시면..아실듯...제일 먼저 질문할때 스크립트를 올려두었으면 좋았을 텐데..죄송합니다.
./test.sh -l test [enter] 했을때.. http 부터 mp3까지만 나와야하는데.. 뒤에 특수문자가 붙어 출력됩니다.
쩝...
#!/bin/bash
# Copyright (c) 2007 Seong-Kook Shin
# Distributed in as-is condition. (No commercial use.)
# $Id: edict.sh,v 1.9 2007/08/24 01:42:45 cinsk Exp $
ENDIC_URL="http://endic.naver.com/small_search.nhn?&query="
EEDIC_URL="http://eedic.naver.com/small.naver?where=keyword&query="
W3M_PATH=`which w3m 2>/dev/null`
MPLAYER_PATH=`which mplayer 2>/dev/null`
DICT_PATH=`which dict 2>/dev/null`
PROGRAM_NAME="edict"
REVISION_STR='$Revision: 1.9 $'
# Default dictionary type
dictype=en
if test ! -x "$W3M_PATH"; then
echo "error: w3m(http://w3m.sourceforge.net/) not found." 1>&2
echo "error: Perhaps your system does not have w3m installed." 1>&2
echo "error: Or try to adjust the value of W3M_PATH in this script." 1>&2
exit 1
fi
if test -x "$DICT_PATH"; then
use_dict=1
fi
if test -x "$MPLAYER_PATH"; then
enable_audio=1
fi
repeat_count=1
function usage () {
cat < usage: $PROGRAM_NAME [OPTION]... WORD...
Show the definition of WORD
-t XX specify the dictionary type to use
ko - English to Korean dictionary (Naver)
en - English to English dictionary (Naver)
-l play the pronunciation audio
-n XX set repeat count of the audio play
-h display this help and exit
-V output version information and exit
Report bugs to .
EOF
exit 0
}
function exact_match () {
$DICT_PATH -P - -s exact -m >/dev/null
status=$?
if test $staus -eq 0; then
return 0
elif test $status -ne 20; then
echo "warning: dict failed with status $status" 1>&2
fi
return 1
}
OPTIND=0
while getopts "lt:hVn:" opt; do
case $opt in
'l')
option_listen=1
if test -z "$enable_audio"; then
echo "warning: mplayer not found. (Audio disabled)" 1>&2
fi
;;
'n')
repeat_count=$OPTARG
;;
't')
#echo "OPTARG: $OPTARG"
dictype=$OPTARG
;;
'h')
usage
;;
'V')
echo "$PROGRAM_NAME $REVISION_STR" | \
sed -e 's/\$//g' | sed -e 's/Revision: \([0-9.]*\) /version \1/'
exit 0
;;
*)
echo "Try \`-h' for more information." 1>&2
exit 1
;;
esac
done
if test $# -lt $OPTIND; then
echo "error: argument required" 1>&2
echo "Try \`-h' for more information." 1>&2
exit 1
fi
case $dictype in
en|EN)
dicurl=$EEDIC_URL
startmark='^\[dot'
dictname="Collins COBUILD Advanced Learner's English Dictionary 4th Edition"
;;
ko|KO|kr)
dicurl=$ENDIC_URL
startmark='(검색결과|\[btn_close_)'
dictname="동아 프라임 영한사전"
;;
*)
echo "error: unknown dictionary type \`$dictype'" 1>&2
exit 1
;;
esac
shift `expr $OPTIND - 1`
for word in "$@"; do
if test "$multi"; then echo ; fi
w3m -dump "${dicurl}${word}" | awk "
/검색결과가 없습니다./ { exit 1 }
/$startmark/ { doprint=1; next }
/^top$/ { exit }
{ if (doprint) print }"
#/^\[dot/,/^top/ { print }'
# | tail -n +2 | head -n -1
status=$?
#echo "STATUS: $status"
multi=1
if test "$status" -ne 0; then
if test "$use_dict"; then
$DICT_PATH -P - $word
exit $?
else
echo "$word: not found" 1>&2
exit 1
fi
fi
if test "$option_listen" -a "$enable_audio" -a $status -eq 0; then
# url=`w3m -dump_source "${EEDIC_URL}${word}" | grep http://dn-naverdic.ktics.co.kr/naverdic | sed "s/[^']*'\([^']*\)'.*$/\1/"`
# url=`w3m -dump_source "${EEDIC_URL}${word}" | grep mp3 | sed -ne "s/.*\(http:\/\/.*\.mp3\).*/\1/p"`
# url=`w3m -dump_source "${EEDIC_URL}${word}" | sed -ne "s/.*\(http:\/\/.*\.mp3\).*/\1/p"`
# url=`w3m -dump_source "${EEDIC_URL}${word}" | sed -ne "s/.*\(http:\/\/.*\.mp3\).*/\1/p"`
# url=`w3m -dump_source "${EEDIC_URL}${word}" | grep mp3 | sed -ne "s/.*a href=\"\([^\"]\+\).*/\1/p"`
url=`w3m -dump_source "${EEDIC_URL}${word}" | grep mp3 | sed -ne "s/.*a href=\"\([^\"]\+\).*/\1/p"`
echo $url
fi
echo -e "\n--"
echo "$dictname"
echo "A courtesy of Naver dictionary service (http://dic.naver.com/)"
done
음... 저도 원인은
음... 저도 원인은 모르겠지만
html소스가 너무 길어서 그런건지... sed로 잘 뽑혀지지 않네요
url얻는 부분을 vi를 이용해서 해보시는건 어떤가요
w3m -dump_source "${EEDIC_URL}${word}" | grep mp3 > url
vi -c'%s/.\+a href="\([0-9a-zA-Z:\/\-\.]\+\.mp3\).*/\1/g' -c'wq!' url
url=`cat url`
echo $url
짝짝짝...성공..그대를 스크립트의 고수라 명하라...
감사합니다..성공했습니다..
거듭 감사..
댓글 달기