从一个文本文件中挑选出符合条件的内容行
某天,张三得到一个需求,将如下格式的文本文件中的文件名开头的内容行提取出来,存入一个新的文本文件。
ok
0
文件名:1_zoukaige.mp3
index:1
0
文件名:2_dahan.mp3
index:2
0
文件名:3_kuai.mp3
index:3
0
文件名:4_weixiao.mp3
index:4
0
文件名:10_zoukaige.mp3
index:5
0
文件名:12_zoukaige.mp3
index:6
……
5
张三大致看了一下文本内容,足有几千行,这个我熟啊,搞个Java文件读取,过滤一下,分分钟拿下,于是开始了编码。
File f = new File("wb.txt");
String res = "";
try {
InputStream is = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String t;
while((t = br.readLine())!=null){
if(t.startsWith("文件名")){
sb.append(t+"\r\n");
}
}
is.close();
isr.close();
res = sb.toString();
File f2 = new File("wb2.txt");
FileOutputStream fout = new FileOutputStream(f2);
OutputStreamWriter osw = new OutputStreamWriter(fout);//UTF-8
osw.write(res);
osw.close();
} catch (Exception e) {
}
return res;
完成任务后,张三正要去找王哥,回头一看,突然发现王哥正在身后看着他呢,“王哥,这个任务,我完成了!”
“嗯,我看到了,你把文件发我,你这效率不行啊,下次不找你了”,王哥说着话走了。
“啊?这……”。
张三发送完文件,有些郁闷,心想这也挺快的呀,不到十分钟就完成了呀。
张三找旁边的李四,说了说情况,李四听完又看了看张三的代码,说:“嗯,其实有更简单的方法,不用写代码就能实现,你看我的!”
李四接过张三的键盘,按ctrl + alt + t
打开终端,切换路径,输入cat wb.txt | grep '^文件名' > wenjianming.txt
,打开wenjianming.txt,说:“看到没,这样就实现了,比你那个快吧”
“四哥,这命令牛皮啊,具体啥意思?”
“cat wb.txt就是输出文本文件的内容,| 后面的grep命令,就是根据前面cat命令的输出,进行过滤,引号里面的^文件名
的意思就是以文件名字符串开头的内容要保留下来,其他忽略”
张三一脸震惊的看着李四:“没想到还有这种操作,四哥,请收下我的膝盖”
“别整这一出,赶紧写代码吧”
“四哥,咱现在用的是Linux系统,这个我会了。要是Windows系统得怎么办?”
“Windows命令行对utf8格式的文本文件支持不好,改一下编码格式到gbk或者ANSI编码,然后执行type wb.txt | findstr "^文件名" > wenjianming.txt
就行了,这里要用双引号”
“四哥,我有一个文本文件里面保存了许多网址,格式是这样的,你看看”
电影
http://www.dy.com
http://www.mv.com
音乐
http://www.mp3.com
http://www.jiu.com
http://www.dd.com
小说
http://www.xhs.com
http://www.jy.com
如果,我想只把分类都提取出来,我该怎么写命令呢?
“不行,我得写代码了,工作比较着急”,李四拒绝了。
“四哥,中午我请你吃饭,帮个忙啊”
“好吧”,李四又输入了一行命令cat wangzhi.txt | grep -v "^$" | grep -v "^http"
,回车后,就只显示了分类。“看到了吧,后面的grep -v相当于去除空行和http开头的行,这样剩下的就是分类了”
中午,张三请李四吃了饭,约好有空再向他请教。