通过Java实现Linux系统下grep指令的功能
在Linux系统下grep指令常见的使用方式有如下两种: 1.grep pattern files 搜索 files 中匹配 pattern 的内容 2.grep -r pattern dir 递归搜索 dir 中匹配 pattern 的内容 现有如下方法可实现在Windows系统下通过Java代码实现与第一种使用方法相同的功能: import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.CharBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; public class Grep { private static Charset charset = Charset.forName(utf-8); private static CharsetDecoder decoder = charset.newDecoder(); private static Pattern linePattern = Pattern.compile(.*\r?\n); private static Pattern pattern; public static void main(String[] args) { if (args.length 2) { System.err.println(Usage : java Grep pattern file...); return ; } compile(args[0]); for (int i = 1; i args.length; i++) { File f = new File(args[i]); try { grep(f); } catch (IOException e) { System.err.println(f + : + e); } } } private static void grep(File f) throws IOException { //取得 FileChannel FileInputStream fis = new FileInputStream(f); FileChannel fc = fis.getChannel(); // Get the files size and then map it into memory int size = (int) fc.size(); MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY,在Windows系统下通过Java代码实现了与Linux系统写grep命令第一种使用方法相同的功能,执行java Grep abcd 1.txt 2.txt 3.txt 4.txt 运行效果如下: 至此, CharBuffer cb) { Matcher lm = linePattern.matcher(cb); //line matcher Matcher pm = null; //pattern matcher int lines = 0; while (lm.find()) { lines++; CharSequence curLineCs = lm.group();//the current line if (pm == null) { pm = pattern.matcher(curLineCs); } else { pm.reset(curLineCs); } if (pm.find()) { System.out.println(f + + lines + : + curLineCs); } if (lm.end() == cb.limit()) { //文件最后 break; } } } private static void compile(String pat) { try { pattern = Pattern.compile(pat); } catch (PatternSyntaxException e) { System.err.println(e.getMessage()); System.exit(1); } } } 执行java Grep abcd 1.txt 运行效果图如下: 也可以同时搜索多个文件, cb); fc.close(); } private static void grep(File f, size); //把 字节buffer decode 成 charBuffer CharBuffer cb = decoder.decode(bb); grep(f, 。
0,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/server/kaifa/11521.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
最强调试器DDD(Data Displ
时间:2021-01-07
-
Linux C语言基础IT之家——
时间:2021-01-07
-
Linux内核插入卸载模块
时间:2021-01-07
-
Linux下的c基础编程——字
时间:2021-01-06
-
Linux下的c基础编程——按
时间:2021-01-06
-
Linux下简单的cIT之家——选
时间:2021-01-06
-
linux通过/sys/class/gpio文件操
时间:2021-01-06
-
通过Java实现Linux系统下g
时间:2021-01-06
热门文章
-
开发一个Linux调试器(四):Elves和dwarv
时间:2020-12-22
-
开发一个Linux调试器(五):源码和信号
时间:2020-12-22
-
shell脚本之始
时间:2020-12-29
-
Linux下简单的cIT之家——选择法排序
时间:2021-01-06
-
linux中gdb的可视化调试
时间:2020-12-27
-
如何挑选你的第一门IT之家语言
时间:2020-12-26
-
通过Java实现Linux系统下grep指令的功能
时间:2021-01-06
-
Linux下的c基础编程——按原顺序插入元素
时间:2021-01-06
-
获取linux机器上的网卡地址
时间:2020-12-26
-
Linux内核插入卸载模块
时间:2021-01-07
