| |
 |
|
 |
 |
|
 |
findstring 文本文件中搜索字符串
|
|
|
需要一个能检索文件内容的小程序, 对perl不太熟悉,最近要操作查阅众多源码众多配置文件, 有时候很想检索这些文本文件中某个字符串, 内容搜索的. 以前用 find -type f -exec cat {} \; 再加管道(pipe)再 grep -n xxx, 但是现在没法满足了(dorainm对find命令也不甚精通), 只好自己写个 shell 来做吧!
看下程序:
$ findstring
findstring, by dorainm, dorainm@gmail.com
usage: findstring keystring [-r] [path]
$
|
参数: keystring 就是要检索的关键字字符串 -r 选择参数, 添加了-r意思是递归检索, 否则是检索当前目录下的文件 path 选择参数, 指定目录, 否则就检索当前目录
下面看看实现的程序代码!
if( $ARGV[1] eq "-r" )
{
@files = `find $ARGV[2] -type f`;
}
else
{
@files = `find $ARGV[1] -maxdepth 1`;
}
|
find 检索目录文件,首选还是 find, find [PATH] -type f [-name *] 能列出指定目录及子目录下的所有文件, 加上 -maxdepth=1 可以设置递归深度,比如 1 的时候,就是不检索子目录了 :)
sub check_text_file()
{
local $result = `file $_[0]`;
if( $result =~ m/text/ )
{
return 1;
}
else
{
return 0;
}
}
|
file 判断文件类型的利器! GNU/Linux没有扩展名之说,我们检索文件内容中的一条字符串,肯定不能 cat 一个二进制文件!
sub search_string_in_file()
{
local $result;
local @results = `cat $_[0] | grep -n $_[1]`;
foreach $result ( @results )
{
chomp $result;
printf "$_[0]:$result\n";
}
return;
}
|
grep 索引出所有文本文件后, 现在开始读取, 想到的就是grep, grep -n 参数能够显示相应行号
运行相应效果
$ findstring WIN
./#.c:5:#define WIN -1
./#.c:6:#define UNWIN 0
./#.c:209: return WIN;
./#.c:212: return UNWIN;
./#.c:237: if(chkWin() == WIN) break;
$ findstring WIN -r
./jin/jin.c:18:#define WINNER -1
./jin/jin.c:255: chess_value[i]=WINNER;
./#.c:5:#define WIN -1
./#.c:6:#define UNWIN 0
./#.c:209: return WIN;
./#.c:212: return UNWIN;
./#.c:237: if(chkWin() == WIN) break;
$ findstring WIN -r ./jin/
./jin/jin.c:18:#define WINNER -1
./jin/jin.c:255: chess_value[i]=WINNER;
$
|
利用不同的程序不同的功能, 拼凑, 终于完成了需要的效果, perl 写的不好, 见笑 :)
完整程序下载:
 |
| 文件: | findstring.tar.gz |
| 大小: | 0KB |
| 下载: | 下载 |
|
|
|
|
TAG
findstring
内容搜索
字符串
|
|
发表于: 2007-11-11,修改于: 2007-11-11 18:08,已浏览783次,有评论0条
推荐
投诉
|
|
 |
|
 |
|  |
|
 |
|