[Linux]搜索文件是否包含指定内容并返回文件名

在Linux系统中,find和grep都是很强大的命令,可以做很多很多事情,今天刚好有人问“如何查找哪些文件包含了特定字符串,并显示这些文件的名称”。

第一种方法:使用grep,假设搜索所有的.cpp文件是否包含‘open‘字符串,如果包含了,则显示该文件,命令如下:

grep -rl ‘open‘ . --include=*.cpp

则执行结果如下:

./test/testall/file.cpp

./test/testall/shell_test.cpp

./test/daemontest/main.cpp

但是有时候只显示文件名,也不知道出现的地方到底是什么样子的,如果还有顺带查看一下那一行的内容,可以用如下命令:

grep -rn ‘open‘ . --include=*.cpp

则,执行结果如下:

./test/testall/file.cpp:270:    FILE *file = fopen(file_name.c_str(),"w");

./test/testall/file.cpp:273:            printf("Can‘t open the file\n");

./test/testall/shell_test.cpp:29:       FILE *file = fopen(file_name, "r");

./test/daemontest/main.cpp:53:  openlog("daemontest",LOG_PID,LOG_USER);

显示了文件名,行号以及该行内容。

第二种方法:使用find命令+grep

假设搜索所有的.cpp文件是否包含‘open‘字符串,如果包含了,则显示该文件,命令如下:

find -name ‘*.cpp‘ -exec grep -l ‘open‘ {} \;

则结果如下:

./test/testall/file.cpp

./test/testall/shell_test.cpp

./test/daemontest/main.cpp



时间: 2024-10-08 14:59:20

[Linux]搜索文件是否包含指定内容并返回文件名的相关文章

java检测文件内是否包含指定内容

package com.test; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; /** * 检测client文件是否包含指定名称 * @author Wdnncey * */ public class Baohan { public sta

linux搜索文件过程

1.文件中的数据是放在磁盘的数据区中的,而一个文件名则是通过对应的i节点与这些磁盘块联系起来,这些盘块的号码就存放在i节点的逻辑块数组i_zone[]中.在文件系统的一个目录中,其中所有文件名信息对应的目录项保存在该目录名文件的数据块中,例如,root/下的所有文件名的目录项就保存在root/目录名文件的数据块中,而文件系统根目录下的所有文件名信息则保存在指定i节点(1号节点)的数据块中,文件名的目录项结构如下: struct dir_entry{ unsigned short indoe;//

利用Lucene测试索引生成的segment.fnm文件所包含的内容(详解)

/* * * 这段代码用来测试文件segment.fnm文件所包含的内容 * .fnm包含了Document中的所有field名称  * */ 生成的索引文件.fnm中所包含了Document的所有Field名称. 如图就是生成索引,打开所显示的文件. package segment; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache

判断指定文件中是否包含指定内容,如果没有, 则写入,如果有,则跳过

grep -q "内容" 文件(绝对路径) grep -q "set nu" /etc/vimrc if [ $? -eq 1 ];then 指定内容不存在 if [ $? -eq 0 ];then 指定内容存在 在此以vim默认配置项为例. grep -q "set nu" /etc/vimrc if [ $? -eq 1 ];then echo 'set nu' >> /etc/vimrc echo 'colorscheme de

Linux 搜索文件和文件夹的 4 种简单方法

Linux 管理员一天都不能离开搜索文件,因为这是他们的日常活动.了解一些搜索的东西是不错的,因为这能帮助你在命令行服务器中工作.这些命令记忆起来不复杂,因为它们使用的是标准语法. 可以通过四个 Linux 命令啦执行此操作,每个命令都有自己独特的功能. 方法 1:使用 find 命令在 Linux 中搜索文件和文件夹 find 命令被广泛使用,并且是在 Linux 中搜索文件和文件夹的著名命令.它搜索当前目录中的给定文件,并根据搜索条件递归遍历其子目录. 它允许用户根据大小.名称.所有者.组.

pandas删除包含指定内容的行

Outline 处理数据时,遇到文件中包含一些不需要的数据(行),需要把这些不符合要求的行给删除掉. 例如:该数据中应该都是2000年的数据,但是包含了一些2001年的数据,所以需要把2001年的数据给删除掉. 筛选出指定行 找到所有包含2000年的数据: source_df[(source_df['date'].map(lambda d: d.split('/')[0])).isin([‘2000’])] # source_df 为读取的csv文件对象 根据pandas中取反操作:”~“, 取

Linux 查找当前目录下所有包含指定内容的文件

1.查找当前目录[./]中含用内容为zhang的所有文件 [[email protected] data]$ grep -rl zhang ./ ./a.txt ./b.txt 2.查找当前目录中含用内容为zhang的文件并将修改为"liu" [[email protected] data]$ sed -i "s/zhang/xxxx/g" `grep -rl zhang ./` 总结:sed -i "s/查找字符/替换字符/g" `grep 查

linux中查找包含指定内容的文件

##文件名+内容 grep -r "查询内容" 文件目录 ##只显示包含内容的文件名 grep -r -l "查询内容" 文件目录 ##文件名+内容 find 文件目录 -type f |xargs grep "查询内容"; eg: grep -r "version.app.xinyartech.com" /data/nginx/conf.d grep -r -l "version.app.xinyartech.co

采用多线程和生产者消费者模式来实现对于一个目录以及所有子目录下的文件内容的搜索,打印出包含指定关键字的行.

利用ArrayBlockingQueue可以方便的实现生产者和消费者,所有消费者线程共用资源ArrayBlockingQueue对象,从而实现线程安全.生产者线程搜索当前目录及子目录,并且将相应的File对象添加到队列中,消费者线程对每个File对象进行关键字的查询,如果查到头,即停止查询. import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; import java.util.c