IT学习网是免费的终身在线学习平台,现在主要提供IT(互联网)方面的教程,博客等方面的内容
主页 > 后端 > > 正文

Java实现Linux grep命令,快速搜索目录下文件中内容

来源:IT学习网整理 发布时间:2020-01-21 10:37 标签:Linux快速命令搜索Java实现录下grep
浏览:

用过Linux的人对grep命令都不会陌生,在面试的时候,如果一个说他会Linux,但是不会grep,基本不会有太好的结果。

在我平时的工作中,grep经常被用于:

查看进程,Linux标准输出过滤

统计功能,grep配合其它命令,如awk

文件内容过滤,查看一个目录下有那个文件包含了指定的内容。比如这个目录下那个文件中包含艾贺

之前写过:Grep使用方法](https://www.jianshu.com/p/92df6f8fd3fb),感兴趣可以阅读

grep虽好,但其主要用在Linux上,可能windows上有其它的替代品,不过目前还没有去寻找。灵机一动,这个用Java实现不是也很简单吗?

查看进程,统计,在Windows上用的比较少,但是文件内容过滤在Window上有需要,下面主要说下如何实现文件内容过滤。

需求:查看目录下包含某个内容的文件,及其所在的具体行内容

之前写过:

Java多种读文件方式

Java函数式编程

Java正则表达式

这里我们采用Java8的Files配合流式编程。

Files.walk 用于遍历文件

如果需要可以使用正则表达式过滤内容,Java正则使用:https://www.jianshu.com/p/eec9bd411391

public class GrepDemo { public static void main(String[] args) throws IOException { String path = "/Users/aihe/Documents/user-426671-1579310873"; String world = "代码"; Map<Path, List<String>> map = new HashMap<>(); grep(path, world, map); for (Map.Entry<Path, List<String>> pathListEntry : map.entrySet()) { System.out.println(pathListEntry.getKey()); for (String s : pathListEntry.getValue()) { System.out.println(s); } System.out.println("\n\n"); } } /** * 查看目录下包含某个内容的文件,及其所在的具体行具体内容,结果保存在map中 * * @param path * @param map */ private static void grep(String path, String searchWorld, Map<Path, List<String>> map) throws IOException { // 遍历文件 Files.walk(Paths.get(path)) .filter(p -> Files.isRegularFile(p)) // 进行处理 .filter(p -> { // 可以提取为一个函数 try { return Files.readAllLines(p) .stream() .anyMatch(s -> { // 可以采用正则匹配: // 参考:https://www.jianshu.com/p/eec9bd411391 boolean contains = s.contains(searchWorld); if (contains) { map.computeIfAbsent(p, k -> new LinkedList<>()); map.get(p).add(s); } return contains; }); } catch (IOException e) { return false; } }) .count(); } }

结果,目前对过滤到的内容需要手工高亮

Java,实现,Linux,grep,命令,快速,搜索,录下 . Java实现Linux grep命令,快速搜索目录下文件中内容

主要写法就是这样了。

最后

实在是有些献丑. 如果大家有好的意见和想法,欢迎指出。

然后:

阿里陶系技术部招人,目前大把机会,HC众多,成功率高,流程快,可辅导修改简历,技术答疑,速来… 没事加个朋友也可以
发我邮箱:aihe.ah@alibaba-inc.com
加我微信:aihehe5211

热门文章

  • 中文编程软件bootstrap简介、环境安装、排
    中文编程软件bootstrap简介、环境安装、排

    中文编程软件bootstrap简介、环境安装、排

    中文编程软件一、 简介 概述 该框架是由Twitter公司(全球最大的微博)两个工程师研发的,基于html、css、javascript的开源框架。 用...

  • 编程自学入门视频Unity 3D导入三维模型
    
编程自学入门视频Unity 3D导入三维模型

    编程自学入门视频Unity 3D导入三维模型

    将三维模型导入 Unity 3D 是游戏开发的第一步。 下面以 3ds Max 为例,演示从三维建模软件中将模型导入 Unity 3D 的过程...

  • 新手制作网页从何下手
    新手制作网页从何下手

    新手制作网页从何下手

    今天在吧里面回答问题的时候 回答了很多一些新手提出如何做网页的问题 如何做网页 怎样制作网页 怎么样制作网业...

  • 明白了这点才能学好编程it自学网站,否
    明白了这点才能学好编程it自学网站,否

    明白了这点才能学好编程it自学网站,否

    首先要明确告诉你的是,在大学课堂或培训班学到的知识远远达不到企业开发的要求。如果你觉得大学毕业就应该找...

  • it自学课程C++进修从零开始(三)
    it自学课程C++进修从零开始(三)

    it自学课程C++进修从零开始(三)

    it自学课程同样,自学入门it,这样也将举办隐式范例转换long AB::*p = AB::B_b;。留意AB::B_b的范例为long B::,则将举办隐式范例转换。如何转换?本来AB::B_b映射...

后端

更多 >
后端scratch编程软件Django(中间件)
后端程序员入门教程django2入门课程之web开发的
后端编程学习网python 图片在线转字符画预览
后端趣味编程python的Web框架,Django模型系统二
后端计算机程序设计Django配置介绍

工具资源

更多 >