2013-06-21 2 views
0

Я закодирован небольшой скрипт в Баш, который гласил некоторые HTML и должны напечатать HREF для ссылки:Bash: необычный разрыв строки

#!/bin/bash 

link=$(echo $source | sed -ne 's#^.*<a href="\([^"]*\)".*$#\1#p') 

    if [ "$(echo "$link" | grep '/fonts/list/style')" ] 
    then 
     echo "http://www.domain.com$link/10000" 
    fi 

Источник вар находится в моем примере:

<li><span>19</span><a href="/fonts/list/style/home words">linktext</a></li> 

Проблема: сценарий печати не

http://www.domain.com/fonts/list/style/home words/1000 

вместо этого печатает

http://www.domain.com/fonts/list/style/home 
words/1000 

Как я могу удалить или избежать этого разрыва строки?

+1

Не используйте [тег: баш], [тег : sed], [tag: grep], ... для анализа HTML. Используйте подходящий HTML-парсер. –

+0

Покажите, как вы устанавливаете '$ source', вероятно, это проблема. Кроме того, вы должны процитировать его в «echo» $ source ». – Barmar

ответ

0

Вы должны спасаясь от " появляться в <li>...:

Это работает для меня:

#!/bin/bash 

source="<li><span>19</span><a href=\"/fonts/list/style/home words\">linktext</a></li>" 

link=$(echo $source | sed -ne 's#^.*<a href="\([^"]*\)".*$#\1#p') 

    if [ "$(echo "$link" | grep '/fonts/list/style')" ] 
    then 
     echo "http://www.domain.com$link/10000" 
    fi 

Выходной

http://www.domain.com/fonts/list/style/home words/10000 
+0

Спасибо. Я немного упрощаю код для сообщения. Если я сохраню ссылку в массиве, например. ** catlinks [$ i] = $ (echo "http: //www.domain.com$link/10000") **, там снова перерыв. У вас есть идея? – nextone

+0

Это потому, что все «странные» символы должны быть экранированы: '/', '$', ... – fedorqui

+0

Это зависит от случаев. Лучше следовать [комментарий gniourf_gniourf] (http://stackoverflow.com/questions/17238389/bash-unusual-line-break/17238493#comment24978219_17238389) и не использовать bash для этого. – fedorqui

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