extract ชื่อ file จาก url ด้วย Shell Script


เนื่องจากคิดไม่ออกแล้วว่าจะเอาคำสั่งอะไรดีที่จะ extract ชื่อ file จาก url ก็เลยทำดังนี้

   url="http://www.somesite.org/some/path/here/and/the/filename.txt"
   s1=`echo $url | sed -e 's|/| |g'`
   n=`echo $s1 | wc -w `
   fname=`echo $s1 | cut -d" " -f $n`

คำสั่ง sed

   -e แปลว่า ให้ใช้ script ต่อไปนี้
   s|/| |g แปลว่า แทนที่เครื่องหมาย / ด้วย ช่องว่าง ส่วนตัว g แปลว่า global (ทั้งหมด)

   ดังนั้นค่า s1 จะได้เป็น

         http: www.somesite.org some path here and the filename.txt

คำสั่ง wc

    wc -w แปลว่า นับจำนวนคำทั้งหมด
    จากคำสั่งนี้จะได้ค่า 8

คำสั่ง cut

    cut -d" " -f $n
         -d แปลว่า ตัวแบ่งคือ " " (ช่องว่าง)
         -f  แปลว่า field ที่เท่าไหร่ ในที่นี้คือเอาตัวที่ 8

ดังนั้น fname จึงได้เป็น filename.txt

เอวังด้วยประการฉะนี้

คำสำคัญ (Tags): #uncategorized
หมายเลขบันทึก: 6277เขียนเมื่อ 2 พฤศจิกายน 2005 14:20 น. ()แก้ไขเมื่อ 18 มิถุนายน 2012 14:44 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (4)

ลองแบบนี้ น่าจะพอใช้แก้ปัญหานี้ได้ครับ

echo "http://www.somesite.org/some/path/here/and/the/filename.txt" | sed -e "s//.*// /" | cut -d' ' -f2

-วิภัทร 

 

ต่อจากข้างบน ลืมอธิบาย คือว่า

 sed -e "s//.*// /" มันจัดการเปลี่ยน ตัวอักษรภายใน /.../ ให้เป็น ตัวอักษร space ซึ่งเราอาจเปลี่ยนเป็น ตัวอักษรอะไรก็ได้

หลังจากนั้นก็ใช้  cut -d' ' -f2 จัดการหั่นตัวอักษรที่ต้องการออกมาครับ

-วิภัทร 

ได้จริงๆด้วยครับ ;-)

แต่ใน Shell Script ต้องบัง Escape Charector ไว้ พวก / น่ะครับ ผมทำอย่างนี้ครับ

echo "http://www.somesite.org/some/path/here/and/the/filename.txt" | sed -e 's//.*// /' | cut -d' ' -f 2

ขอบคุณครับ 

สำหรับกรณีนี้ คำสั่ง 'basename' ซึ่งโดยทั่วไปใช้แยกชื่อไฟล์ จาก full pathname ก็สามารถเอามาใช้ได้ครับ

basename http://www.somesite.org/some/path/here/and/the/filename.txt

 

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท