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

时间:2016-03-08 22:39:20

标签: html grep

使用sgrep,结构化grep,如何重置sgrep的区域计数器,以便sgrep在每个< tr>内部再次从1开始计数。元件。

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

<tr><td>2015</td><td>Jane</td>
    <td>Smith</td></tr>
<tr><td>2011</td>
    <td>Sarah</td>
</tr>

我的示例sgrep命令行是:

sgrep -o'--%n:%r--\n' '"<td>" .. "</td>"' in.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>--

sgrep的区域计数器%n每次进入tr标签时重置为1.

2 个答案:

答案 0 :(得分:1)

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

此致,原始sgrep的联合设计师PekkaKilpeläinen

答案 1 :(得分:0)

您也可以使用简单的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>
$