2016-01-07 92 views
0

我使用shell腳本對webmodem的HTML診斷頁面源代碼進行網絡掃描,我需要修復摩托羅拉完成的一些編碼錯誤。在該種打破了東西的輸入標籤的末端缺少閉合>由於前述的</td>是動態的,我需要能夠動態地固定標記的值如何修復shell腳本中的字符串(刪除

例字符串:。 <td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253 </td>

看看它如何結束value=253 </td>

如何在整個頁面中用「>」替換空格?請記住,還有其他地方的</td>在這些頁面之前有空格,因此sed 's/ <\/td>/><\/td>/g'將無法​​正常工作。

感謝您的幫助

+2

你需要支持之類的東西''?如果不是,你可以做一些類似'/ <(.*)<' –

+1

@TomaszLewowski它應該是's/<([^ <*]) hek2mgl

+0

@ hek2mgl謝謝您的更正 –

回答

0

雖然它沒有很好地形成HTML它不應該打破你的工具 - 如果你正在使用正確的工具。

要解析HTML,您需要使用DOM解析器。我建議使用XPath。從Linux上的命令行,您可以使用xmllint,它是包libxml2-utils的一部分。 DOM解析器可用槽libxml2(Linux上的常用xml庫)可以解析上述無效輸入。

比方說,你要提取的輸入值:

xmllint --html --xpath '//input[@name="NumberOfCpes"]/@value' test.html 

它報告的HTML解析錯誤,你可以重定向到/dev/null

xmllint --html --xpath '//input[@name="NumberOfCpes"]/@value' test.html 2>/dev/null 

,但仍讓你在標準輸出正確的價值:

value="253" 

但是,當然這是令人討厭的,該網站親完全無效的HTML。

+0

也許我沒有用「解析」來表達我自己,抓住源代碼中的信息位或通過使用grep和sed轉儲lynx的HTML輸出我找到了我需要的東西。這個破碎的標籤會導致l to在轉儲的輸出上顯示一個空的輸入框。至少在短期內,DOM解析器對我來說可能看起來有些過分。但我會在稍後研究一些學習。謝謝 – vizi0n

+0

大聲笑!你正在使用Lynx並說DOM解析器(如xmllint)是開銷?! lynx如何解析HTML?魔法? – hek2mgl

+0

我正在使用wget或lynx從調制解調器獲取HTML源代碼,如果我只需要轉儲瀏覽器輸出,就直接使用lynx。我需要的一些信息不是特定的標籤,只是純文本,所以我使用grep,sed並剪切了很多。也許解析不是我所做的正確的術語。 – vizi0n

0

與sed的

sed -r 's#(<input[^>]+)[[:space:]]*<#\1>#g;s#[[:space:]]+([>])#\1#g' 

例如一個正則表達式和替換的方法,如果你有以下

<td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253  </td> 

你的輸出就會

<td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253>/td>` 
相關問題