您的位置:首页 > 运维架构 > Linux

在linux目录下搜索文本内的字符串

2014-03-17 15:52 197 查看
# !/bin/bash
#在某个目录下所有文件中进行查找字符串
#该bash第一个参数代表目录,第二个参数代表查找内容
#返回文本名和字符串坐在行
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

#判断参数是否正确
if [ $# -ge 2 ]; then
directory=$1
stringname=$2
else
echo -e  "you must input the directory and string"
fi

#递归获得所有文件名
function searchfile()
{
filenames=`ls $1`
for filename in $filenames
do
filename=${1}"/"$filename
if [ -d $filename ] ; then
#为目录是递归下去查找文件
#echo "$filename"
cd $filename
#exit
searchfile $filename
cd ..    # 记得递归完成后要返回到原始目录,有点类似回溯法(循环+递归)
elif [ -f $filename ] ; then
searchstring $filename
else
echo "None"
fi
done
}

#在文件中查找我们需要的字符串并且获取行号,其功能其实是可以用grep -n 查找内容代替的
function searchstring()
{
links=`wc -l $1 | cut -d " " -f1`
for ((i=1;i<=$links;i++))
do
words=`head -$i $1|tail -1 `
#echo $words
for word in $words
do
#echo $word
test $word == $stringname && echo "--------------- $1  行号: $i---------------"&& echo "该行内容为:$words"
done

done
}

searchfile $directory

在写的过程中发现几点需要注意的:

    1。变量的使用。除了初始化的时候,一般使用变量时都应该注意是否要使用$,而且一般的情况都是要得。

    2.   路径的问题。在命令行pash下我们都会有当前路径,所以可以使用相对路径,但是在自己写脚本时,应该使用绝对路径比较好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: