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

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

บันทึกนี้เขียนที่ GotoKnow โดย 

หมายเลขบันทึก: 6277, เขียน: , แก้ไข, , สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ, ความเห็น: 4, อ่าน: คลิก

คำสำคัญ (Tags) #uncategorized

บันทึกล่าสุด 

ความเห็น (4)

วิภัทร
IP: xxx.12.74.8
เขียนเมื่อ 

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

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

-วิภัทร 

 

วิภัทร
IP: xxx.12.74.8
เขียนเมื่อ 

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

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

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

-วิภัทร 

nagarindkx
IP: xxx.12.74.5
เขียนเมื่อ 

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

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

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

ขอบคุณครับ 

cj
IP: xxx.12.74.7
เขียนเมื่อ 

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

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