写一个正则,统计出一个文件中某一段文字出现了多少次。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个正则,统计出一个文件中某一段文字出现了多少次。相关的知识,希望对你有一定的参考价值。

说具体一点,我现在要统计apache的日志记录文件中的某段文字一共出现了多少次。
要分析的文件目录:D:\xampp\apache\logs\access.log;
文件:access.log;

现在要统计其中的一段文字总共出现了多少次:
该文字为:"GET /CI/system/application/controllers/tongji.php";
说白了就是上面的连接被请求了多少次。

希望能写的全面点。

你要查找的文字是固定的,就不需要正则了。
如果是 Linux,用一个命令就能统计出来

grep "GET /CI/system/application/controllers/tongji.php" access.log |wc -l

Windows 的话,没这么方便。可能得自己写个小脚本。
也可以装个 Cygwin,就可以用 Linux 的命令了。
如果不是自动统计的话,用个文本编辑器,查找一下字符串也就出结果了。

补充:
我看了你给我发的消息,找不到路径是因为 windows 没有 grep 命令。
grep 是 Linux/Unix 的命令。
Windows 可以装 Cygwin 模拟 Linux 环境。
Cygwin 的安装程序可以从这儿下载:
http://www.cygwin.com/

如果还是不行,给你一个VBScript的程序(Windows的脚本)

Function grep(sSearch, sFileName)
SET FSO = CreateObject("Scripting.FileSystemObject")
SET FP = FSO.OpenTextFile(sFileName, 1, FALSE)
If Err.Number <> 0 Then
WScript.Echo ("Error " & CStr(Err.Number) & " " & Err.Description)
EXIT Function
End If
i = 1
count = 0
Do Until FP.AtEndOfStream
sLine = FP.ReadLine
If sLine<>vbNull Then
Z = InStrRev(sLine, sSearch)
If Z>0 Then
'WScript.Echo i & " : " & sLine
count = count + 1
End If
End If
i = i + 1
Loop
grep = count
End Function

Set args = WScript.Arguments
count = grep(args(0), args(1))
WScript.Echo "Total Count = " & count

保存成 grep.vbs,放在系统环境变量PATH的某个路径下,或者是当前路径,
然后执行
grep "GET /CI/system/application/controllers/tongji.php" access.log

也能出结果。
参考技术A 用软件Replace Pioneer可以办到。支持正则表达式,而且同时支持多个项目一起统计,每个统计还可以看明细。

详细步骤:
1. ctrl-o打开待处理的日志文件access.log
2. 打开Tools->Pattern Counter菜单
3. 点击Clear清除缺省的统计项,点击Add添加
* 在Name输入"我的统计1"
* 在Pattern输入:
"GET /CI/system/application/controllers/tongji.php"(不带双引号)
4. 去掉Regular Exp前面的勾,点击Count即得出总数。
参考技术B # Ruby one-liner

ruby -ne "i=0; i=i+1 if GET /CI/system/application/controllers/tongji\.php; puts i" access.log

或者自己写你自己PHP的呀,太简单了...

<?php
$i=0;
$fh = fopen("access.log");
while ($line = $fh->readline())
if (preg_match($line, /GET\s?\/CI\/system\/application\/controllers\/tongji\.php/i))
GLOBAL $i++;

echo $i;
?>

打印网页中某一段内容

很久之前,Insus.NET的写过一篇,打印Web网页的。
今次尝试使用jQuery来实现。

打印的网页如下,需要打印的内容,使用一个div标签包含起来。并给此div一个ID值,稍后在jQuery代码会选择到此div。
另外还有放置一个铵钮,让用户点一点此铵钮,就能调用打印对话框进行打印。

 

<div id="divPrintContents">
        标题标题标题标题标题标题标题标题标题标题
        <br />
        <hr />
        <br />
        内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 <br />
        内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容<br />
        内容内容内容内容内容内容内容<br />
        内容内容内容内容内容内容内容内容内容内容内容内容内容内容<br />
        内容内容内容内
    </div>
    <br />
    <input type="button" id="btnPrint" value="打印" />
Source Code


既然要使用jquery,那得在网页上引用jQuery类库:

<script src="~/Scripts/jquery-3.1.1.js"></script>


jQuery代码:

 

 $(function () {
            $("#btnPrint").click(function () {
                var frame1 = $(\'<iframe />\');
                frame1[0].name = "frame1";
                frame1.css({ "position": "absolute", "top": "-1000000px" });

                $("body").append(frame1);

                var frameDoc = frame1[0].contentWindow ? frame1[0].contentWindow :
                    frame1[0].contentDocument.document ? frame1[0].contentDocument.document : frame1[0].contentDocument;
                frameDoc.document.open();
                frameDoc.document.write(\'<html>\');
                frameDoc.document.write(\'<head>\');
                frameDoc.document.write(\'<title>分析报表</title>\');
                frameDoc.document.write(\'<link href="style.css" rel="stylesheet" type="text/css" />\');
                frameDoc.document.write(\'</head>\');

                frameDoc.document.write(\'<body>\');
                frameDoc.document.write($("#divPrintContents").html());
                frameDoc.document.write(\'</body>\');

                frameDoc.document.write(\'</html>\');
                frameDoc.document.close();

                setTimeout(function () {
                    window.frames["frame1"].focus();
                    window.frames["frame1"].print();
                    frame1.remove();
                }, 500);
            });
        });
Source Code

 
演示:

 

以上是关于写一个正则,统计出一个文件中某一段文字出现了多少次。的主要内容,如果未能解决你的问题,请参考以下文章

python pandas 统计某一数据出现多少次

如何利用JAVA代码实现文件中某一行中某一段字符串的修改?

正则表达式

C语言 统计字符串中某一子串出现的个数

python 如何统计dataframe中某一列数据中每个元素出现的次数

输入一行字符,分别统计出其中英文字母、空格、数字、其它字符的个数!利用 while?