我想要的是制作一个小脚本,对成功通过另一个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个小时才得到一个workarround但没有解决这个问题。
答案 0 :(得分: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 {}" \;
在文件中,说myfind.sh
可以通过说sh myfind.sh /my/path/to/search firststring secondstring
来调用。