Html sgrep如何重置封闭标签内的区域计数器

Html sgrep如何重置封闭标签内的区域计数器,html,grep,Html,Grep,使用sgrep,structured grep,我如何重置sgrep的区域计数器,以便sgrep在每个元素中再次从1开始计数 考虑以下示例输入html表片段。结构不规则;在同一行上有多个标签,每个tr标签内的td标签数量可变: <tr><td>2015</td><td>Jane</td> <td>Smith</td></tr> <tr><td>2011</td&g

使用sgrep,structured grep,我如何重置sgrep的区域计数器,以便sgrep在每个元素中再次从1开始计数

考虑以下示例输入html表片段。结构不规则;在同一行上有多个标签,每个tr标签内的td标签数量可变:

<tr><td>2015</td><td>Jane</td>
    <td>Smith</td></tr>
<tr><td>2011</td>
    <td>Sarah</td>
</tr>
2015Jane
史密斯
2011
莎拉
我的示例sgrep命令行是:

sgrep -o'--%n:%r--\n' '"<td>" .. "</td>"' in.txt
sgrep-o'-%n:%r--\n''“”。。.txt中的“”
我得到这个输出:

--1:<td>2015</td>--
--2:<td>Jane</td>--
--3:<td>Smith</td>--
--4:<td>2011</td>--
--5:<td>Sarah</td>--
--1:<td>2015</td>--
--2:<td>Jane</td>--
--3:<td>Smith</td>--
--1:<td>2011</td>--
--2:<td>Sarah</td>--
--1:2015--
--2:简--
--3:史密斯--
--4:2011--
--5:莎拉--
相反,我希望得到以下输出:

--1:<td>2015</td>--
--2:<td>Jane</td>--
--3:<td>Smith</td>--
--4:<td>2011</td>--
--5:<td>Sarah</td>--
--1:<td>2015</td>--
--2:<td>Jane</td>--
--3:<td>Smith</td>--
--1:<td>2011</td>--
--2:<td>Sarah</td>--
--1:2015--
--2:简--
--3:史密斯--
--1:2011--
--2:莎拉--

sgrep的区域计数器%n在每次输入tr标记时都重置为1。

您也可以使用简单的1行代码awk来执行此操作:

$ cat file1
<tr>
    <td>2015</td>
    <td>Jane</td>
    <td>Smith</td>
</tr>
<tr>
    <td>2011</td>
    <td>Sarah</td>
    <td>Holmes</td>
</tr>
$ awk -v cnter=0 '/td/ {cnter=cnter%3+1; print cnter":"$1}' file1
1:<td>2015</td>
2:<td>Jane</td>
3:<td>Smith</td>
1:<td>2011</td>
2:<td>Sarah</td>
3:<td>Holmes</td>
$
$cat文件1
2015
简
史密斯
2011
莎拉
福尔摩斯
$awk-v cnter=0'/td/{cnter=cnter%3+1;打印cnter:“$1}”文件1
1:2015
2:简
3:史密斯
1:2011
2:莎拉
3:福尔摩斯
$

无法重置sgrep输出格式模式的区域计数器%n。因此,需要使用其他一些工具来解决此任务,如ritesht93建议的awk。通常,使用-o开关给出的sgrep输出格式模式只允许以非常简单的方式修饰(或替换)结果区域。也就是说,搜索表达式的值是一组区域,不包含其本地上下文的任何信息,例如周围的元素。输出格式模式仅以默认顺序应用于结果中的每个区域,并且每个应用程序的结果附加到输出

尊敬的Pekka Kilpeläinen,原sgrep的联合设计师