regex
  • bash
  • sed
  • wget
  • multiline
  • 2016-10-28 76 views 3 likes 
    3

    我有一個文件中的URL列表(每行=不同的域)我想掃描(不遞歸),並選擇兩個模式,這是在不同的行。經過努力2天 - 我的頭在旋轉......grep multiline pattern

    這是很重要的HTML部分:

    <a href="http://subdomain.domain.tld/">Home</a> 
    </li> 
    <li> 
    <a data-uv-trigger='true' href='mailto:[email protected]'> 
    

    我需要選擇域(subdomain.domain.tld)和電子郵件ADRESS(約翰福音@ doe.com)。我可以通過兩步來(wget/sed)這些零件。

    wget -O - -i urls-to-scan-manuell.txt | sed -n "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p" 
    
    wget -O - -i urls-to-scan-manuell.txt | sed -n "s/\(.*true' href='mailto\)\(.*\)\('>.*\)/\2/p" 
    

    但我想一次選擇兩個部分,並將它們寫入到一行文件中,並用空格(空格)分隔。這是sed的多行東西,讓我瘋狂。

    請:我需要你的幫助,你會:)

    謝謝你在前進, 賴。

    回答

    2

    備案:這是not recommended to parse HTML using regex


    您可以使用sed-e多個表達式,可以幫助這裏:

    wget -O - -i urls-to-scan-manuell.txt | sed -n \ 
        -e "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p" \ 
        -e "s/\(.*true' href='mailto\)\(.*\)\('>.*\)/\2/p" 
    

    這將產生兩行,一個域,一個用於電子郵件。 如果您更喜歡一條線上的輸出,則可以管道到paste - -。缺省的分隔符是TAB,您可以更改與-d標誌,因此,例如:

    wget -O - -i urls-to-scan-manuell.txt | sed -n \ 
        -e "s/\(.*a href=\"\)\(.*\)\(\">Home.*\)/\2/p" \ 
        -e "s/\(.*true' href='mailto:\)\(.*\)\('>.*\)/\2/p" | \ 
    paste -d, - - 
    

    會產生:

    http://subdomain.domain.tld/,[email protected] 
    

    我冒昧和mailto後添加一個:在這種模式下, ,因爲我猜那是你的意圖。

    +0

    Arf,我在'sed'的末尾和'paste'之前忘了管道符號'|'。現在添加它,檢查我的更新。 – janos

    相關問題