0

我想要的是制作一个小脚本,对成功通过另一个 grep 的文件进行 grep。

这是我写的:

#!/bin/bash -f

if (( $# != 3 ))
then
    echo "Usage: $0 <directory> <grep1> <grep2>"
    exit 1
fi

dir=$1
grep1=$2
grep2=$3

files=`grep -Ril "$grep1" $dir`

for file in $files; do
        grep -iH "$grep2" $file
done

所以这有效,以防目录是特定的。但它不能以我想使用的方式工作:

./grepIfSucceededGrep.sh /mnt/logs/\*/20130929/\* test1 test2
grep: /mnt/logs/*/20130929/*: No such file or directory

但是当我手动输入命令时,它可以完美运行。必须对星号做些什么。

grep -Ril "segment1" /mnt/logs/*/20130929/*
/mnt/logs/1111/20130929/000033.00.log
/mnt/logs/1112/20130929/000033.00.log
/mnt/logs/1113/20130929/154852.00.log
/mnt/logs/1114/20130929/171227.00.log

为什么?!:( 只是搜索了 2 小时以获得解决方法,但没有解决该问题。

4

1 回答 1

0

你真的需要一个脚本来实现你所需要的吗?你可以说:

find /path -type f -exec sh -c "grep -iq string1 {} && grep -iq string2 {} && echo {}" \;

这将列出/path同时包含 和 的子目录和子目录中string1的文件string2

如果您需要将其放入脚本中以便可以传递参数,请说:

find $1 -type f -exec sh -c "grep -iq $2 {} && grep -iq $3 {} && echo {}" \;

在文件中,saymyfind.sh可以通过say 来调用sh myfind.sh /my/path/to/search firststring secondstring

于 2013-10-01T09:01:37.150 回答