精华内容
下载资源
问答
  • Linux grep查找文件中的关键字

    万次阅读 2018-08-29 14:03:43
    一、查看文件追加含有关键字的内容 tail -f xxxxx.log | grep keyword 二、查看文件含有关键字的内容 cat xxx.log | grep keyword ...三、统计文件中关键字出现次数 cat xxx.log | grep-o keyword | wc -l ...

    Linux grep 命令用于查找文件里符合条件的字符串。grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

    -r 是递归查找

    -n 是显示行号

    -R 查找所有文件包含子目录

    -i 忽略大小写

    ---xargs配合grep查找

    find -type f -name '*.php'|xargs grep 'message'

    一、查看文件追加的含有关键字的内容

    tail -f xxxxx.log | grep keyword

    二、查看文件含有关键字的内容

    cat xxx.log | grep keyword

    三、统计文件中关键字出现的次数

    cat xxx.log | grep -o keyword | wc -l

    四、查看当前文件夹中包含某字符的文件

     grep -r 'XXX' ./

    展开全文
  • Linux命令-查找文件中的关键字

    千次阅读 2020-03-03 15:42:16
    分情况考虑: 1、如果是用vi或vim打开文件了,查找方法是: 在命令行模式下输入"/关键字" ...3、 如果是在某个目录下的多个文件中查找内容中包含的关键字查找方法是: grep -r "关键字" 目录 ...

    分情况考虑:

    1、如果是用vi或vim打开文件了,查找方法是:

    在命令行模式下输入"/关键字"

    2、如果文件是在当前文件夹目录下,且没有打开,查找方法是:

    cat 文件名 | grep "关键字"

    3、 如果是在某个目录下的多个文件中查找内容中包含的关键字,查找方法是:

    grep -r "关键字" 目录

    展开全文
  • How do I search a text file for a key-phrase or keyword and then print the line that key-phrase or keyword is in?解决方案searchfile = open("file.txt", "r")for line in searchfile:if "searchphrase" in ...

    How do I search a text file for a key-phrase or keyword and then print the line that key-phrase or keyword is in?

    解决方案searchfile = open("file.txt", "r")

    for line in searchfile:

    if "searchphrase" in line: print line

    searchfile.close()

    To print out multiple lines (in a simple way)

    f = open("file.txt", "r")

    searchlines = f.readlines()

    f.close()

    for i, line in enumerate(searchlines):

    if "searchphrase" in line:

    for l in searchlines[i:i+3]: print l,

    print

    The comma in print l, prevents extra spaces from appearing in the output; the trailing print statement demarcates results from different lines.

    Or better yet (stealing back from Mark Ransom):

    with open("file.txt", "r") as f:

    searchlines = f.readlines()

    for i, line in enumerate(searchlines):

    if "searchphrase" in line:

    for l in searchlines[i:i+3]: print l,

    print

    展开全文
  • 查找文本文件中的关键字,说白了就是以文本文件作为输入,进行字符串匹配,找返回其第一次出现的下标位置。但是由于数据是以文本文件的形式作为输入的,如何存储和进行匹配就成为了一个问题。下面以两种方法来介绍...
    查找文本文件中的关键字,说白了就是以文本文件作为输入,进行字符串匹配,找返回其第一次出现的下标位置。但是由于数据是以文本文件的形式作为输入的,如何存储和进行匹配就成为了一个问题。下面以两种方法来介绍如何操作。注:本文中采用的字符串匹配算法只是普通的字符串匹配算法,重点在对文件处理和分块查找。

    一、蛮力法
    这种方法非常简单,把文件中的所有数据输入到一个字符数组中,然后以数组作为主串,关键字为模式串,进行字符串匹配即可。

    但是这里有一个问题,就是字符数组要多大才合适?由于不同的文件的数据量可能差别非常大,所以我们应该根据文件的大小来动态分配字符数组来存储主串。即我们现在的问题变为如何获得文件的大小。文件的大小可以用如下的方法来获得,首先打开文本文件,保存其文件位置,然后把文件指针定位到文件的末尾,获得其偏移量,然后再把文件指针恢复到原先即可。恢复文件指针是为了不让该调用对文件的其他操作产生影响,从外部看来这个操作调用前与调用后文件的状态并没有变化过。其现实代码如下,返回文件所占的字符总数:
    1. int GetFileLength(ifstream &inputFile)  
    2. {  
    3.     //保存文件当前位置  
    4.     streampos pos = inputFile.tellg();  
    5.     //定位到文件尾  
    6.     inputFile.seekg(0, ios::end);  
    7.     //返回文件尾的偏移量,即文件的大小  
    8.     int length = inputFile.tellg();  
    9.     //返回到文件先前的位置  
    10.     inputFile.seekg(pos);  
    11.     return length;  
    12. }  

    则实现字符串匹配的函数如下:
    1. int IndexInFile(const char *fileName, const char *keyWord)  
    2. {  
    3.     //以只读方式,打开文件fileName  
    4.     ifstream inputFile(fileName);  
    5.     if(!inputFile)  
    6.     {  
    7.         //打开文件失败  
    8.         cerr<<"error: unable to open input file: "  
    9.             <<fileName<<endl;  
    10.         return -1;  
    11.     }  
    12.     //获得文件的长度,即字节数,并开劈一个同样大小的数组保存文件数据  
    13.     int length = GetFileLength(inputFile);  
    14.     char *text = new char[length+1];  
    15.     //把文件的内容讲到数组中  
    16.     inputFile.read(text, length);  
    17.     inputFile.close();  
    18.     text[length] = '\0';  
    19.     //进行模式串匹配,并返回结果  
    20.     int index = IndexOf(text, length, keyWord, strlen(keyWord));  
    21.     delete []text;  
    22.     return index;  
    23. }  
    24. int IndexOf(const char *text, int textSize,  
    25.             const char *match, int matchSize)  
    26. {  
    27.     for(int i = 0; i <= textSize - matchSize; ++i)  
    28.     {  
    29.         int j = 0;  
    30.         while(j < matchSize && match[j] == text[i+j])  
    31.             ++j;  
    32.         //所有的字符都与文本中的一致,则匹配成功  
    33.         if(j == matchSize)  
    34.             return i;  
    35.     }  
    36.     //匹配失败  
    37.     return -1;  
    38. }  
    其代码非常简单,不再多说了。

    二、分治法
    注意,这里主要是用到了把文件分成若干大小相同的块,并对各个块进行字符串匹配的方法来处理,并不是指字符串匹配算法使用了分治的思想。

    由于文件的数据可能非常巨大,一次性地把文件的所有内容读入到内存时,有时是不可能的,而且这样做也没有什么必要,因为我们要查找的串很可能就在文件的前面部分,而我们却把一个文件的所有内容调入到内存中,浪费了大量的内存空间,而且效率不高。所以我们应该把文件进行分块处理,每次从文件中读取一定的字符到缓冲区中,进行处理。其实现方法如下:

    首先把开文件,每次从文件读取指定个数的字符到buffer中,然后以buffer中的字符作为主串,关键字作为模式串进行字符串匹配,若匹配成功把返回其下标,若匹配不成功,则把下标值累加上读到缓冲区中字符的个数,并继续从文件中读取字符到buffer中,继续对buffer进行字符串匹配,直到找到关键字,或文件结束。

    这个方法不用把文件的所有内容调入内存中,而是每次都从内存读入一个buffer的内容,可以减少内存的开销,不论文件有多大都可行。然而这个方法的难点在哪里呢,难点就要当关键字在两个缓冲区之间时该如何识别和处理。

    下面说说我的想法,为了方便解说,我们假设buffer的大小为6,要查找的关键字为defg,文件的内容为abcdefghijk,我们每次从文件中读取5个字符到buffer中(第6个字符为'\0'),为abcde,可以看到我们要查找的字符串只有一部分在buffer中,它们被分为了两个部分。首先我们判断当在buffer上查找不成功,是否是由于所有的字符都匹配,但是模式串还没匹配完,主串却已经到了尽头,若是,把把之前与模式串匹配的部分字符复杂到buffer的前面,然后再从文件中输入数据,并放到其后面。在这个例子中,就是把de复制到buffer的前面,再从文件中读取数据到de后面的buffer中,读入完毕后,buffer的数据变成defgh,然后再对其进行匹配,即可匹配成功。

    其实现代码如下:
    1. int IndexInFile(const char *fileName, const char *keyWord)  
    2. {  
    3.     //以只读方式,打开文件fileName  
    4.     ifstream inputFile(fileName);  
    5.     if(!inputFile)  
    6.     {  
    7.         //打开文件失败  
    8.         cerr<<"error: unable to open input file: "  
    9.             <<fileName<<endl;  
    10.         return -1;  
    11.     }  
    12.     int keySize = strlen(keyWord);//关键字的长度  
    13.     int index = 0; //记录关键字首次出现的位置  
    14.     int lastMatch = 0;//记录最后一次匹配的位置  
    15.     const int bufferSize = 5;  
    16.     char buffer[bufferSize + 1];  
    17.     while(!inputFile.eof())  
    18.     {  
    19.         //把最后一次比较配置的字符复制到最前面  
    20.         WriteEndToBegin(buffer, bufferSize, lastMatch);  
    21.         //读入数据到缓冲区中lastMatch后的位置中  
    22.         inputFile.read(buffer + lastMatch,  
    23.                        bufferSize - lastMatch);  
    24.         buffer[bufferSize] = '\0';  
    25.         cout<<buffer<<endl;  
    26.         int thisIndex = IndexOf(buffer, bufferSize,  
    27.                                 keyWord, keySize, lastMatch);  
    28.         if(thisIndex != -1)  
    29.         {  
    30.             //若查找成功,则下标值为之前查找过的字符数加上此次查找的字符数  
    31.             index += thisIndex;  
    32.             return index;  
    33.         }  
    34.         else  
    35.         {  
    36.             //若查找不成功,则加上新放入到缓冲区的字符数  
    37.             index += (bufferSize - lastMatch);  
    38.         }  
    39.     }  
    40.     return -1;  
    41. }  
    42. int IndexOf(const char *text, int textSize,  
    43.             const char *match, int matchSize,  
    44.             int &lastMatch)  
    45. {  
    46.     for(int i = 0; i < textSize; ++i)  
    47.     {  
    48.         lastMatch = 0;  
    49.         while(lastMatch < matchSize && match[lastMatch] == text[i+lastMatch])  
    50.             ++lastMatch;  
    51.         //所有的字符都与文本中的一致,则匹配成功  
    52.         if(lastMatch == matchSize)  
    53.             return i;  
    54.         //所有的字符都匹配,但是模式串还没匹配完,主串已经到了尽头  
    55.         if(i + lastMatch == textSize)  
    56.             break;  
    57.     }  
    58.     //匹配失败  
    59.     return -1;  
    60. }  
    61. void WriteEndToBegin(char *text, int textSize, int writeCount)  
    62. {  
    63.     //把字符数组中最后writeCount个字符写到最前面  
    64.     for(int i = 0; i < writeCount; ++i)  
    65.     {  
    66.         text[i] = text[textSize - writeCount + i];  
    67.     }  
    68. }  

    代码分析:
    这里主要解析一下IndexOf函数中的lastMatch参数,该参数记录了主串中与模式串匹配的字符的个数。当IndexOf函数返回-1时,它尤其有用,因为它让我们知道,在buffer中,有多少个字符已经与模式串(关键字)匹配了,在上面的例子中,就是de两个字符,则其值为2,所以把buffer中最后的两个字符复制到了其前面。

    同时还要注意,buffer的大小一定要大小模式串的长度,不然的话,buffer会因为装不下一个模式串而出错。在代码中为了演示而把buffer的大小定为6(5+1),但是在使用时应该把它改变成你想要的大小,通常256或512是一个合适的值。

    三、复杂度分析
    两个算法的时间复杂度无为O(n*m),n为文件的字符数,m为关键字的字符数(即模式串的字符数)。空间复杂度第一个算法为O(n),第二个算法为O(1),因为不论文件多大,缓冲区的大小都是确定的。

    源代码可以点击这里下载:


    PS:本人成为了CSDN2013博客之星候选人之一,如果你觉得本人写的博客还可以,请投我一票,支持一下我,我的投票地址是:
    展开全文
  •   查找目录下中包含关键字的文件 find /home/zhichi/report/dcdayrpt -name "*.sql" -print 参考文章 ... 查找单个文件中的关键字 cat dcdayrpt.sql|grep r...
  • 有时候在 Ubuntu 的命令行里,需要在一堆文本文件中查找特定的关键字, 一个一个文件打开找很麻烦的,这里介绍一个在文件夹下查找关键字的命令。 find path -name 'file_name' | xargs grep 'key_words' 比如在...
  • grep 查找关键字(可以带通配符) 文件名称 如 grep '登陆成功' log.log  通配符查找
  • find . -type f -exec grep -nH -i ping {} \; | cut -d ':' -f 1 | sort -u
  • 选择文件,编辑模式进入...按下”/“键,这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。 找到相关文字以后:  (1)按下小写n,向下查找  (2)按下大写N,向上查找...
  • // (1)源文件为一个txt文档,内容为符号串;...// (3)依据关键字文件中的关键字在源文件中进行检索判断,得到关键字 #include"stdio.h" #include"string.h" #include"malloc.h" #define B...
  • 文件中查找指定的关键字,采用了两种不同的方法实现,一种一次读入所有的数据,一种是使用缓冲区,多次读入数据到缓冲区中进行字符串匹配。
  • 在当前目录下查找包含test_key关键字的文件: find . -name '*' -type f | xargs grep "test_key"| awk -F : '{ print $1 }' | uniq
  • 缘起:开发人员需要tomcat一个项目在一个月访问请求量,因其他原因只剩下查找tomcat请求日志方法获取,刚好最近在学习python,于是就用python摸索了下;大体思路:1.把相应tomcat日志文件拷到有python环境...
  • 超大文件中查找关键字

    千次阅读 2015-08-20 12:05:00
    请设计算法,可以快速文件中查找指字关键字的记录。 因为已经排好序了,可以使用 二分查找方法检索。 又因为文件过于庞大,可以将文件File分成1000份子记录集即读入10000次,每次读入10亿/10000条记录; 每次 ...
  • ” 当前目录下 关键字为'COMPILE'sudo grep -i 'COMPILE' ltls.c // 在ltls.c文件中关键字为'COMPILE'用法: grep [选项]...模式 [文件]...在每个文件中查找样式或标准输入。PATTERN 默认是一个基本正则表达式...
  • 缘起:开发人员需要tomcat一个项目在一个月访问请求量,因其他原因只剩下查找tomcat请求日志方法获取,刚好最近在学习python,于是就用python摸索了下;大体思路:1.把相应tomcat日志文件拷到有python环境...
  • 转载于:https://www.cnblogs.com/gwxppg/p/11388237.html
  • // (1)源文件为一个txt文档,内容为符号串;... // (3)依据关键字文件中的关键字在源文件中进行检索判断,得到关键字 #include"stdio.h" #include"string.h" #include"malloc.h" #define BUFLEN 20480 #define M
  • 命令如下: find -type f -print | xargs grep "include" | awk '{gsub(":"," ");print $1}' | uniq -c 查找文件->过滤文件名->去重 列出文件中出现关键字的次数和文件名
  • 用Vim打开文件后,直接输入 /关键字 并回车,定位到第一个关键字,之后通过n向下查找,通过N向上查找 方法二 ?content 用Vim打开文件后,直接输入 ?关键字 并回车,定位到最后一个关键字,之后通过n向上查找,通过N...
  • 情况a:a:a: 已使用vim打开文件,命令行模式下输入"/关键字" 情况b:b:b: 文件在当前目录下没有打开,cat 文件名 | grep "关键字" ...情况c:c:c: 在某个目录下多个文件中查找,grep -r "关键字" 目录
  • linux shell使用vi命令打开文本文件后,如果需要查找字符,可在normal模式下直接按“/”进入查找模式,输入要查找的字符并按下回车,vim会跳到第一个匹配位置。 按n查找下一个,按Shift+n查找上一个。 其他...
  • 在指定目录下的文件中查找关键字

    千次阅读 2014-08-19 17:44:36
    ############################################################ # File: py_search.py - 查找...# - 遍历目录和搜索文件中的关键字 # Date: 2014/08/19 # By : LinJK ############################################
  • grep192.168.1.1*-r 在所有文件中查找192.168.1.1 转载于:https://www.cnblogs.com/fdd566/p/6399216.html

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,566
精华内容 1,026
关键字:

查找文件中的关键字