2014-12-04 72 views
0

第1期:我的代碼工作只有grep的採取恆定的模式是這樣的:在巨大的html文件中選擇兩個patern之間的文本?

echo "$s" | grep -oP '(?<=class="A3">).*(?=</a>)' 

第二個問題:一個變量不是工作壓力太大

這裏分配輸出是我的腳本:

#!/bin/sh 

filename="data.txt" 
Ptr_ValidChannel="><a title=\"Id: " 
Ptr_ChannelNameStart="<class=\"A3\">" 
Ptr_ChannelNameEnd="</a>" 
while read -r line 
do 
    case "$line" in 
     # working 100% 
     #*$Ptr_ValidChannel*) echo "$line" | grep -oP '(?<=class="A3">).*?(?=</a>)' ;; 

     # not working 
     #*$Ptr_ValidChannel*) echo $line | grep -oP '(?<=$Ptr_ChannelNameStart).*?(?=$Ptr_ChannelNameEnd)' ;; 

     # not working 
     *$Ptr_ValidChannel*) myvar=$(echo $line | grep -oP '(?<=$Ptr_ChannelNameStart).*?(?=$Ptr_ChannelNameEnd)') ;; 

    esac 

done < "$filename" 

echo $var_name 

exit 

爲了簡化data.txt的內容:

<TD WIDTH="15%"><a title="Id: I24 NEWS" class="A3">I24 News Français</a><br /><font color="#555555"> <a title="Sporadic or full 16/9 transmission"><img src="/169.gif"></a> 

在我的系統命令:

ls -la /bin/sh 

輸出爲:

/bin/sh -> dash 

最誠摯的問候。

PS。沒有BASH代碼請。只有SH。

+1

請閱讀此:http://stackoverflow.com/a/1732454/867395 – 2014-12-04 09:00:47

+0

使用XML解析器,如「xmllint」。 – Cyrus 2014-12-04 09:01:41

+0

我不想做一個HTML解析器,我只是想使用一個子集的html標籤提取一些數據。 – user3072470 2014-12-04 09:45:17

回答

0

看完這篇文章:dash as bin sh.我想通了,做什麼正確和更便攜讓我的代碼工作:

#! /bin/sh 

filename='data.txt' 
Ptr_ValidChannel='><a title="Id: ' 
Ptr_ChannelNameStart='class="A3">' 
Ptr_ChannelNameEnd='</a>' 
while read -r line 
do 
case "$line" in 
    *"$Ptr_ValidChannel"*) var_name=$(printf %s "$line" | grep -oP '(?<='"$Ptr_ChannelNameStart"').*?(?='"$Ptr_ChannelNameEnd"')'); printf %s "$var_name"; printf '\n'; ;; 
esac 

done < "$filename" 
exit 

謝謝您的意見

最好reagrds。

相關問題