指定字符串(支持正则),检查某目录下所有子文件内容中是否包含此字符串;若包含,则输出文件以及内容。

为何不用管道符号直截了当?考虑到find出来的文件路径可能包含空格,故需要指定回车去作为分隔符。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash

KEY_WORD=$1
if [ -z "${KEY_WORD}" ]; then
echo '缺少关键词'
fi

DIR=$2
if [ -z "${DIR}" ]; then
echo '缺少目录'
fi

IFS='
'

files=`find "${DIR}" -type f`

for file in ${files}; do
info=`grep -in "${KEY_WORD}" "${file}"`
if [ ${#info} -gt 0 ]; then
echo "============================================"
echo "file path: ${file}"
echo "${info}"
fi
done
echo "============================================"