เนื่องจากคิดไม่ออกแล้วว่าจะเอาคำสั่งอะไรดีที่จะ 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
เอวังด้วยประการฉะนี้
ลองแบบนี้ น่าจะพอใช้แก้ปัญหานี้ได้ครับ
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