Bash Grep多次不处理一个文件
我需要搜索打开和关闭html标记,并打印找到的标记数。但似乎是第二次使用一个文件不起作用。第二个块每次显示0个标记。如果我先将第二个块移到上面,它会显示正确数量的标记,但现在位于第二位的块会显示0个标记Bash Grep多次不处理一个文件,bash,grep,Bash,Grep,我需要搜索打开和关闭html标记,并打印找到的标记数。但似乎是第二次使用一个文件不起作用。第二个块每次显示0个标记。如果我先将第二个块移到上面,它会显示正确数量的标记,但现在位于第二位的块会显示0个标记 ./s.sh <my.html TAG=$(grep -oP "<([^>\/]+)>" $1 | wc -l) echo "<TAG> -" $TAG CTAG=$(grep -oP "</([^>\/]+)>" $1 | wc -l
./s.sh <my.html
TAG=$(grep -oP "<([^>\/]+)>" $1 | wc -l)
echo "<TAG> -" $TAG
CTAG=$(grep -oP "</([^>\/]+)>" $1 | wc -l)
echo "</TAG> -" $CTAG
/s.sh无需在模式中转义斜杠,您可以省略捕获组和-p
选项:
$ TAG=$(grep -o "<[^>/]*>" "$1" | wc -l)
$ echo "<TAG>: " $TAG
<TAG>: 13
$ CTAG=$(grep -o "</[^/>]*>" "$1" | wc -l)
$ echo "</TAG>: " $CTAG
</TAG>: 11
$TAG=$(grep-o”/]*>“$1”| wc-l)
$echo“:“$TAG”
: 13
$CTAG=$(grep-o“]*>“$1”| wc-l)
$echo“:“$CTAG
: 11
请提供示例输入和预期输出。您似乎试图用grep解析html或xml,这不是正确的工具,谢谢您的编辑,但仍然缺少示例输入看起来您只需要引用$1
,使用“$1”
\/]+)>“
为什么\/
也包含在[…]
中,当它也开始表达式
<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>
$ TAG=$(grep -o "<[^>/]*>" "$1" | wc -l)
$ echo "<TAG>: " $TAG
<TAG>: 13
$ CTAG=$(grep -o "</[^/>]*>" "$1" | wc -l)
$ echo "</TAG>: " $CTAG
</TAG>: 11