我需要计算htm文件中3行的多行模式的出现次数。问题是我在第1行和第3行中有修复内容,但第2行的内容未修复,它可以更改(该文件是一个日志)。这是我的意思的一个例子:
fix line 1
changing line 2
fix line 3
我已经搜索了解决方案,但是没有找到100%合适的解决方案... pcregrep
应该可行,但是如何包含更改的第2行?到目前为止,我只能寻找两条修复线。 代码本身就是问题,但输出对我来说非常易于使用。
pcregrep -Mc '^line1\n^line2\n^line3' file
或者我应该使用sed
代替? 代码有效,但输出 使用复杂。如何处理它来计算这种多线模式的出现?因为第1行和第3行之间只有一行,这很重要。
sed -n '/^line1/,/^line3/=' file
我希望你能帮助我。非常感谢你!
答案 0 :(得分:1)
您可以使用以下pcregrep
命令。
pcregrep -Mc '^line 1\n[^\n]*\nline 3' file
示例:强>
$ cat file
line 1
changing line 2
line 3
foo
bar
buz
line 1
changing line
line 3
foo
bar
buz
line 1
bar
line 3
$ pcregrep -Mc '^line 1\n[^\n]*\nline 3' file
3
答案 1 :(得分:0)
idk pcregrep
是什么,我没有在我使用的任何UNIX机器上使用它,但你可以使用awk,因为它可用于所有UNIX安装,例如:针对@ AvinashRaj的示例输入文件运行并使用GNU awk进行多字符RS:
$ awk -v RS='^$' '{print gsub(/(^|\n)line 1\n[^\n]*\nline 3\n/,"")}' file
3
或与任何awk:
$ awk '{rec=rec $0 RS} END{print gsub(/(^|\n)line 1\n[^\n]*\nline 3\n/,"",rec)}' file
3
我添加锚定到RE的前面+后面,使得无法产生错误的匹配。