我有以下字串:
<td class="mytest" title="testfile" style="width:20%">0</td>
如何使用 awk 在 td 元素中獲取值?在我的情況下,它是 0。
我對 Linux 很陌生,感謝任何幫助!
uj5u.com熱心網友回復:
如果允許您選擇您的工具,我建議您使用hxselect(from html-xml-utils),那么如果您file.txt持有
<td class="mytest" title="testfile" style="width:20%">0</td>
它就像
cat file.txt | hxselect -i -c td
輸出
0
解釋:-i不區分大小寫,-c只列印內容,td是 CSS 選擇器。免責宣告:0標簽內沒有換行符,因此后面沒有換行符。
但是,如果您被迫使用已安裝的基礎,那么如果您使用的 linux 機器已經安裝python(如果我沒記錯的話,最近的Ubuntu版本默認有),您可以html.parser如下利用,創建tdextract.py具有以下內容的檔案
import sys
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
self.insidetd = False
super().__init__()
def handle_starttag(self, tag, attrs):
if tag == "td":
self.insidetd = True
def handle_endtag(self, tag):
if tag == "td":
self.insidetd = False
def handle_data(self, data):
if self.insidetd:
sys.stdout.write(data)
parser = MyHTMLParser()
parser.feed(sys.stdin.read())
然后做
cat file.txt | python tdextract.py
這將提供與hxselect前面描述的相同的輸出。請注意,python使用縮進標記塊,因此保持前導空格的數量至關重要。
uj5u.com熱心網友回復:
一種選擇可能是使用 xmllint( xmllint --html) 與路徑 提取價值。
例子:
#!/bin/bash
data='<td class="mytest" title="testfile" style="width:20%">0</td>'
value=$(xmllint --html --xpath '//html/body/td/text()' - <<< "$data")
echo "$value"
輸出:
0
uj5u.com熱心網友回復:
如果您的輸入總是那么常規,并且您沒有也無法安裝支持 XML 的工具,那么在每個 Unix 機器上的任何 shell 中使用任何 sed:
$ sed 's:<td.*>\(.*\)</td>:\1:' file
0
我使用 sed 而不是 awk,因為像這樣在單個行上進行簡單替換是 sed 最適合的。使用 GNU awk,您可以使用第三個引數來匹配():
$ awk 'match($0,"<td.*>(.*)</td>",a){print a[1]}' file
0
但是使用 POSIX awk 會更加神秘(當然還有其他方法):
$ awk 'sub("</td>","") && sub("<td.*>","")' file
0
想想上面在做什么并測驗它以確保你沒有得到任何錯誤的匹配。匹配你想要的總是比不匹配你不想要的類似字串容易得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/407367.html
標籤:
上一篇:如何決議多級(最多5級)嵌套JSON物件并在將其本地存盤在核心資料中后使用swift在tableview/SwiftUI中顯示它?
