2012-03-07 25 views
5

Tôi đang cố gắng tạo sed phù hợp với phần cuối cùng của url và xuất kết quả đó. Ví dụ:Sử dụng sed và regex để nắm bắt phần cuối cùng của url

echo "http://randomurl/suburl/file.mp3" | sed (expression)

nên cung cấp cho các đầu ra:

file.mp3

Cho đến nay tôi đã cố gắng sed 's|\([^/]+mp3\)$|\1|g' nhưng nó chỉ xuất ra toàn bộ url. Có lẽ có điều gì đó tôi không thấy ở đây nhưng dù sao đi nữa, sự giúp đỡ sẽ được nhiều người đánh giá cao!

Trả lời

11

công trình này:

echo "http://randomurl/suburl/file.mp3" | sed 's#.*/##' 
+0

Cảm ơn bạn! Điều đó giải quyết nó :) – glindste

+2

bạn có thể giải thích về những gì nó làm? – nass

3

này nên thực hiện công việc:

$ echo "http://randomurl/suburl/file.mp3" | sed -r 's|.*/(.*)$|\1|' 
file.mp3 

nơi:

  • | đã được sử dụng thay vì / để tách các đối số của lệnh s .
  • Mọi thứ được kết hợp và được thay thế bằng bất cứ thứ gì nếu được tìm thấy sau / vừa qua.

Chỉnh sửa: Bạn cũng có thể sử dụng bash parameter substitution khả năng:

$ url="http://randomurl/suburl/file.mp3" 
$ echo ${url##*/} 
file.mp3 
6

basename là người bạn tốt của bạn.

> basename "http://randomurl/suburl/file.mp3" 
=> file.mp3 
+0

Thats thực sự hữu ích, cảm ơn :) – glindste

2
echo 'http://randomurl/suburl/file.mp3' | grep -oP '[^/\n]+$' 

Đây là một giải pháp sử dụng grep.

Các vấn đề liên quan