2016-11-10 41 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位数的数字? –