2013-09-27 2 views
1

Мне нужно обрезать URL-адреса после третьего /. Я удалил http с самого начала, чтобы сделать его проще.URL-адрес после третьего уровня

Пример:

a.ssl.fastly.net/static/r07/auth014.js 
0.tqn.com/f/f/a/a.ttf?v=3.0.1 

Это должно вернуть

a.ssl.fastly.net/static/r07 
0.tqn.com/f/f 

Я попытался

echo "0.tqn.com/f/f/a/a.ttf?v=3.0.1" | sed 's/.*[\/].*[\/].*[\/].*/\1/' 

, но это не похоже на работу и выдает ошибку:

sed: -e expression #1, char 26: invalid reference \1 on `s' command's RHS 

Может ли кто-нибудь мне помочь?

ответ

2

Вы можете использовать / в качестве разделителя и печати с использованием AWK:

awk -F/ '{print $1"/"$2"/"$3}' file 
+0

Спасибо большое .. это сработало ... не могу поверить, что я забыл это .. – rahul

0

Это удаляет последнее поле:

awk -F/ '{$NF=""}1' OFS=/ 
a.ssl.fastly.net/static/r07/ 
0.tqn.com/f/f/a/ 
3

Вы также можете использовать cut:

cut -d/ -f1-3 

Пример:

$ echo "0.tqn.com/f/f/a/a.ttf?v=3.0.1" | cut -d/ -f1-3 
0.tqn.com/f/f 
1

Это может работать для вас (GNU СЭД):

sed 's|/[^/]*||3g' file 

Использование | в качестве разделителя для команды замены, удаления / с последующим любым числом, не являющихся /-х из 3-го вхождение до конца строки.

Смежные вопросы