這是檔案file.txt
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-173459">7.11.0-0-2022-04-22-173459> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-173459"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T17:34:59Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-135611">7.11.0-0-2022-04-22-135611> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-135611"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T13:56:11Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-101342">7.11.0-0-2022-04-22-101342> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-101342"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T10:13:42Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/8.10.0-0.-/release/8.10.0-0-2022-04-19-164705">8.10.0-0-2022-04-19-164705></td> <td class="text-success">Accepted</td> <td title="2022-04-19T16:47:05Z">6 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/9.11.0-0.nightly-ppc64le/release/9.11.0-0.-2021-08-11-224744">9.11.0-0-2021-08-11-224744></td> <td class="text-success">Accepted</td> <td title="2021-08-11T22:47:44Z">8 months ago</td>
我想輸出為
7.11.0-0-2022-04-22-173459 2022-04-22T17:34:59Z
7.11.0-0-2022-04-22-135611 2022-04-22T13:56:11Z
7.11.0-0-2022-04-22-101342 2022-04-22T10:13:42Z
8.10.0-0-2022-04-19-164705 2022-04-19T16:47:05Z
9.11.0-0-2021-08-11-224744 2021-08-11T22:47:44Z
有什么簡單的方法可以做到這一點嗎?我也想根據我試過的通用時區對它們進行排序
cat file.txt |grep "<td" | grep "href=" | sed 's/<\/a//' |awk 'BEGIN{FS="href="}{print $2}' | awk 'BEGIN{FS=">"}{print $2} {print $5} {print $6}
但它沒有提供所需的輸出
uj5u.com熱心網友回復:
僅使用您顯示的示例,請嘗試以下awk代碼。此外,專家們總是建議使用知道如何決議 html 的語言,以防萬一您沒有該工具(安裝軟體包或使用最新語言),您可以使用這個,但同樣,這只是用顯示的示例清楚地撰寫和測驗的。
用 GNU 撰寫和測驗awk。使用它的FPAT功能,我們可以使用正則運算式來決定我們需要使用哪個欄位,它只會在滿足模式(正則運算式)的行中創建欄位并忽略其他(不是必需的)。
awk -v FPAT='a ]*" href="/[^"]*|<td title="[^"]*' '
{
num1=split($1,arr1,"/")
num2=split($2,arr2,"\"")
print arr1[num1],arr2[num2]
}
' Input_file
uj5u.com熱心網友回復:
使用sed
$ sed 's|\([^/]*/\)\{4\}[^>]*>\([^>]*\).*title[^"]*"\([^"]*\).*|\2 \3|' input_file
7.11.0-0-2022-04-22-173459 2022-04-22T17:34:59Z
7.11.0-0-2022-04-22-135611 2022-04-22T13:56:11Z
7.11.0-0-2022-04-22-101342 2022-04-22T10:13:42Z
8.10.0-0-2022-04-19-164705 2022-04-19T16:47:05Z
9.11.0-0-2021-08-11-224744 2021-08-11T22:47:44Z
uj5u.com熱心網友回復:
首先,如果您的檔案是合法的 HTML,那么如果不被禁止,您應該使用 HTML 決議器而不是greporsed或awk。如果這是不可能的,那么您可以AWK按照以下方式使用 GNU 來完成此任務,讓file.txt內容成為
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-173459">7.11.0-0-2022-04-22-173459> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-173459"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T17:34:59Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-135611">7.11.0-0-2022-04-22-135611> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-135611"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T13:56:11Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/7.11.0-0.-/release/7.11.0-0-2022-04-22-101342">7.11.0-0-2022-04-22-101342> <a href="/releasestream/7.11.0-0.-/inconsistency/7.11.0-0-2022-04-22-101342"><i title="Inconsistency detected! Click for more details" class="bi bi-exclamation-circle"></i></a></td> <td class="text-success">Accepted</td> <td title="2022-04-22T10:13:42Z">3 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/8.10.0-0.-/release/8.10.0-0-2022-04-19-164705">8.10.0-0-2022-04-19-164705></td> <td class="text-success">Accepted</td> <td title="2022-04-19T16:47:05Z">6 days ago</td>
<td class="text-monospace"><a class="text-success" href="/releasestream/9.11.0-0.nightly-ppc64le/release/9.11.0-0.-2021-08-11-224744">9.11.0-0-2021-08-11-224744></td> <td class="text-success">Accepted</td> <td title="2021-08-11T22:47:44Z">8 months ago</td>
然后
awk 'match($0,/[0-9]\.[0-9]{2}\.[0-9]-[0-9]-[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}/){printf "%s ",substr($0,RSTART,RLENGTH)}match($0,/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z/){print substr($0,RSTART,RLENGTH)}' file.txt
輸出
7.11.0-0-2022-04-22-173459 2022-04-22T17:34:59Z
7.11.0-0-2022-04-22-135611 2022-04-22T13:56:11Z
7.11.0-0-2022-04-22-101342 2022-04-22T10:13:42Z
8.10.0-0-2022-04-19-164705 2022-04-19T16:47:05Z
9.11.0-0-2021-08-11-224744 2021-08-11T22:47:44Z
說明:我首先制作了 2 個正則運算式,它們確實描述了我們正在尋找的值,[0-9]是數字,\.是文字點,{2}是重復次數。如果找到第一個值,我會使用printf空格輸出(我不使用print,因為這會添加不需要的尾隨換行符),如果找到第二個值,我會這樣做print。
免責宣告:我假設您正在尋找的值可以使用顯示的正則運算式進行描述,并且存在于每一行中。隨意調整它以適應您的需求。如果您想了解match或substr閱讀字串函式的更多資訊(GNU Awk 用戶指南)
(在 gawk 4.2.1 中測驗)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465454.html
