请教一个问题,查找包含某个字符串的文件的指令怎么写

请教一个问题,查找包含某个字符串的文件的指令怎么写

请教一个问题,查找包含某个字符串的文件的指令怎么写      
cat 文件 | grep 字符串      
没有必要使用 cat:
$ grep 字符串 文件      
如果想要查找某个目录下的所有文件,可能就需要自己写脚本吧
复制内容到剪贴板
代码:
#!/bin/sh
#Usage: search regexp [starting directory] [files to find]

###########################################################
REG_EXP=$1
START_DIR=$2
FILE_TO_FIND=$3
TMP_FILE1=.FILES.FOUND.TMP.
###########################################################
#set -x
if [ -z "$REG_EXP" ] ; then
    echo "Usage: search <regexp> [starting directory] [files to find]"
    echo "  default starting directory is \".\""
    echo "  default file to find is \"*\""
    exit 1
fi

[ -z "$START_DIR" ] && START_DIR="."
[ -z "$FILE_TO_FIND" ] && FILE_TO_FIND="*"
find "$START_DIR" -name "$FILE_TO_FIND" -xdev -type f -print > $TMP_FILE1

while read LINE
do
    grep --binary-files=without-match "$REG_EXP" < $LINE
    if [ $? -eq 0 ] ; then
        echo -en "\\033[0;32m"
        echo "$LINE"
        echo -en "\\033[0;39m"
    fi
done < "$TMP_FILE1"

rm -f $TMP_FILE1
exit 0
      
find 本身不就能做到吗?干吗这么复杂?      
版主大人能不能具体讲讲用find怎么查找包含某个字符串的文件呢?      
这个功能应该用 grep 来实现      
我以前是这样来实现这个功能的:
find DIR -name 'FILE' -type f| xargs grep regexp
或者
grep REGEXP `find  DIR -name FILE -type f`

但是这2种方法都有一个致命的缺点:当文件名里有空格符的时候,bash会把由空格符分隔开的各个部分当成单独的文件名传给grep,因此这些文件就会被略过。所以我才觉得有必要写一个脚本来完成这项工作。      
$ echo "Hello, world." > "good luck.txt"
$ find -name '*.txt' -exec grep -l hello {} \;      
用版主大人的方法找倒是找到了,也能避免文件名中有空格带来的问题,但是美中不足的是只能显示哪句话包含要查找的字符串,却显示不出哪个文件包含要查找的字符串