Shell-Script
兩個標籤之間的文本
我想
<tr> </tr>
從 html 文件中檢索這兩個標籤之間的任何內容。現在我沒有任何特定的 html 要求可以保證 html 解析器。我只是需要一些匹配的東西,<tr>
並</tr>
在兩者之間獲取所有內容,並且可能有多個tr
s。我嘗試了 awk,它有效,但由於某種原因,它最終給了我提取的每一行的副本。awk ' /<TR/{p=1; s=$0} p && /<\/TR>/{print $0 FS s; s=""; p=0} p' htmlfile> newfile
如何解決這個問題?
...
如果你只想<tr>...</tr>
做:
grep -o '<tr>.*</tr>' HTMLFILE | sed 's/\(<tr>\|<\/tr>\)//g' > NEWFILE
對於多行執行:
tr "\n" "|" < HTMLFILE | grep -o '<tr>.*</tr>' | sed 's/\(<tr>\|<\/tr>\)//g;s/|/\n/g' > NEWFILE
首先檢查字元“|”的 HTMLFILE (不常見,但可能),如果存在,則更改為不存在的。
您確實有一個保證 HTML 解析器的要求:您需要解析 HTML。Perl 的HTML::TreeBuilder、Python 的BeautifulSoup等都很容易使用,比編寫複雜而脆弱的正則表達式更容易。
perl -MHTML::TreeBuilder -le ' $html = HTML::TreeBuilder->new_from_file($ARGV[0]) or die $!; foreach ($html->look_down(_tag => "tr")) { print map {$_->as_HTML()} $_->content_list(); } ' input.html
或者
python -c 'if True: import sys, BeautifulSoup html = BeautifulSoup.BeautifulSoup(open(sys.argv[1]).read()) for tr in html.findAll("tr"): print "".join(tr.contents) ' input.html