ubuntu中在终端下如何查找具有某一特定字符串的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu中在终端下如何查找具有某一特定字符串的文件?相关的知识,希望对你有一定的参考价值。

我只知道用find -name 文件名查找文件,但是现在想根据文件中的内容来查找,怎么做呢?比如如何找到具有"main"这个字符串的文件的位置?

在一个文件或多个文件中搜索指定的文本字符串。搜索指定的文件后,find 将显示包含指定字符串的所有行。
语法
find [/v] [/c] [/n] [/i]"String" [[Drive:][Path]FileName[...]]
参数
/v
显示不包含指定 String 的所有行。
/c
计数包含指定 String 的行并显示总行数。
/n
将文件行号置于每行开头。
/i
指定搜索不区分大小写。
" String "
必需参数。指定要搜索的字符组。必须用引号将 String 引起来(即 "String")。
[Drive:][Path] FileName
指定要在其中搜索指定字符串的文件的位置和名称。
/?
在命令提示符下显示帮助。
注释
指定字符串

如果不使用 /i,find 将精确搜索指定的 String。例如,find 命令认为字符“a”和“A”是不同的。但是,如果使用/i,find 不区分大小写,并将“a”和“A”视为同一个字符。

如果要搜索的字符串包含引号,必须将包含在字符串中的引号再用引号引起来(即"StringContaining""QuotationMarks")。

将 find 用作筛选器

如果省略文件名,find 将用作筛选器,从标准输入源(通常是键盘、管道或重定向的文件)得到输入,然后显示包含 String 的所有行。

命令语法次序

可以按任何顺序键入 find 命令的参数和命令行选项。

使用通配符

在 find 命令中指定的文件名或扩展名中不能使用通配符(* 和 ?)。要搜索使用通配符指定的一组文件中的字符串,可以在 for 命令中使用 find 命令。

将 /v 或 /n 与 /c 一起使用

如果在相同的命令行中使用 /c 和 /v,find 将显示不包含指定字符串的行数。如果在相同的命令行中指定/c 和 /n,find 将忽略 /n。

针对回车使用 find

find 命令不能识别回车。当使用 find 在包含回车的文件中搜索文本时,必须将搜索字符串限制在可以在两个回车之间找到的文本,也就是不能被回车中断的字符串。例如,“tax”与“file”之间出现回车时,find 不会报告找到“tax file”字符串。
参考技术A 比如查找 /home/znsys/ 下所有含 VoIP 的文件名称:
grep -l 'VoIP' /home/znsys/*

比如查找 /home/znsys/ 文件夹下的所有第三层目录内所有文件中包含 “networking" 的行:
如这些目录:
/home/znsys/client_1/data/
/home/znsys/client_2/data/
/home/znsys/vendor_1/data/
命令为:
grep -i /home/znsys/*/data/* 'networking'

具体可以 grep --help
参考技术B grep main * 参考技术C 搜索啊!

P1308(字符串类,处理字符串查找)

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 )。

输入格式

22行。

11行为一个字符串,其中只含字母,表示给定单词;

22行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从00 开始);如果单词在文章中没有出现,则直接输出一个整数1

 1 #include<iostream>
 2 #include<string>
 3 #include<vector>
 4 #include<cctype>
 5 using namespace std;
 6 int main()
 7     int cal1=0;
 8     string::size_type cal2;
 9     string::size_type tmp;
10     string letter,paragraph;
11     getline(cin,letter);
12     getline(cin,paragraph);
13     letter= +letter+ ;
14     for(auto &ch:letter)
15             ch=tolower(ch);
16     
17     paragraph= +paragraph+ ;
18     for(auto &ch:paragraph)
19             ch=tolower(ch);
20     
21     if((paragraph.find(letter))!=string::npos)
22         cal2=paragraph.find(letter);
23     else
24         cout<<-1;
25         return 0;
26     
27     tmp=0;
28     while((paragraph.find(letter,tmp))!=string::npos)
29         tmp=paragraph.find(letter,tmp);
30         tmp+=letter.length()-1;
31         cal1++;
32         
33         cout<<cal1<<" "<<cal2;
34     
35  

字符串的输入直接getline(cin,str);(并无必要判断是否是无效输入)

本题使用find(str,pos)函数进行处理,千万记得:每次查找一遍后要刷新pos值,使其定位到string的新开头处

以上是关于ubuntu中在终端下如何查找具有某一特定字符串的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Linux shell中在vi打开的文件中查找关键字

如何通过使用 grep 扫描整个目录来在文件内容中查找具有特定字符串的文件 [重复]

如何使用正则表达式查找具有特定起始字符串的所有匹配项? [复制]

如何查看ubuntu服务器开启了哪些端口

java中在String中查找某字的下标值并循环输出

P1308(字符串类,处理字符串查找)