Grep无法多次处理一个文件

问题描述 投票:1回答:1

我需要搜索打开和关闭html标记并打印找到的数量。但似乎是第二次使用,一个文件不起作用。第二个块每隔0个标签向我显示一次。如果我将第二个块移至第一个块上方,则它会显示正确数量的标签,但现在位于第二位的块确实显示0个标签。

./s.sh <my.html


TAG=$(grep -oP "<([^>\/]+)>" $1 | wc -l)
echo "<TAG> -" $TAG

CTAG=$(grep -oP "</([^>\/]+)>" $1 | wc -l)
echo "</TAG> -" $CTAG

我得到此输出:

<TAG> - 13
</TAG> - 0

但是应该得到这样的东西:

<TAG> - 13
</TAG> - 11

输入示例:

<HTML>
    <P>Список сотрудников
    <TABLE BORDER=0>
        <TR><TH>ФИО</TH><TH>Дата</TH></TR>
        <TR><TD>Иванов И.И.</TD><TD>10.12.2019</TD></TR>
        <TR><TD>Сидоров А.В.</TD><TD>11.11.1977</TD></TR>
    </TABLE>
    <P>Всего: 2 чел.
</HTML>
bash grep
1个回答
0
投票

无需在模式中转义斜线,您可以省略捕获组和-P选项:

$ TAG=$(grep -o "<[^>/]*>" "$1" | wc -l)
$ echo "<TAG>: " $TAG
<TAG>: 13

$ CTAG=$(grep -o "</[^/>]*>" "$1" | wc -l)
$ echo "</TAG>: " $CTAG
</TAG>: 11
© www.soinside.com 2019 - 2024. All rights reserved.