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

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

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

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

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

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

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

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

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

之前写过:

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

Files.walk 用于遍历文件

public class GrepDemo {

public static void main(String[] args) throws IOException {

String path = "/Users/aihe/Documents/user-426671-1579310873";

String world = "代码";

Map> map = new HashMap<>();

grep(path, world, map);

for (Map.Entry> 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> 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();

}

}

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

主要写法就是这样了。

最后

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

然后:

阿里陶系技术部招人,目前大把机会,HC众多,成功率高,流程快,可辅导修改简历,技术答疑,速来… 没事加个朋友也可以

发我邮箱:aihe.ah@alibaba-inc.com

加我微信:aihehe5211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值