2016-11-10 32 views
0

我想以更新的test.html文件編號/記數:查找和HTML文件更新編號使用awk

<td class="no">(8)</td> 
<td class="no">(9)</td> 
<td class="no">(10)</td> 
<td class="no">(11)</td> 
<td class="no">(23)</td> 

可以在其他行之間添加一個新的生產線,所以我不想總是手動更新計數。另一個條件是,更新應該在數字7之後開始。

我試圖使用gensub替換符合條件的行,但它不起作用。必須有一個更簡單的方法來確定數字!沒有教程或論壇帖子都幫助我,否則我不明白他們...

到目前爲止我有:

/^<td class="no">\([0-9]+\)<\/td>$/ { 
    a = gensub(/(.*)([0-9]+)(.*)/, "\\2", "g") # this finds only 1 digit, why? 
    if (a > 7) print a 
} 
+0

你爲什麼''的答案是'。*'中的'。*'也是數字。無論如何,您可以將http://stackoverflow.com/a/40512703/1745001中給出的答案應用於此問題。答案最後請特別參考針對非嵌套終結符的簡化gawk特定解決方案。 –

回答

1

如果你只需要determine the numbers,你只需要擺脫任何字符不是一個數字

/^<td class="no">\([0-9]+\)<\/td>$/ { 
    gsub("[^0-9]","") 
    if ((0+$0) > 7) print 
} 

更新(0+$0) > 7代替我原來的$0 > 7,因爲cygwing gawk沒有比較$07作爲數值,但作爲字符串值---我不知道爲什麼。我不熟悉cygwin

該解決方案輸出以下:

8 
9 
10 
11 
23 

如果test.html文件已經包含像

<td class="no">(71)</td> 

行原代碼($0 > 7)會同時打印

71 
在cygwin中爲

+0

這隻能將8和9打印到控制檯中。我在Windows上使用Cygwin。 –

+0

@SananeLan,當我的代碼大於7時,我的代碼會在編碼框內打印這些編號。你編碼的代碼是什麼? – Jdamian

+0

就像我說過的,只有8,9號線在籃筐裏。你的代碼是否也打印出2位數的數字? –