2012-04-30 66 views
1

我在bash中做了一些工作。它是这样的:按正确顺序查找单词

作为第一个参数,您键入单词可以按写入顺序在文件中找到它,在第二个参数中键入目录。它必须递归搜索并返回文件名。

例如:bash mybash "alice cat" . 它应该返回一个包含示例文件,“爱丽丝有一只猫”,“爱丽丝猫”,而不是“猫爱丽丝”

我smething这样

#!/bin/bash 
pattern=".*" 

for arg in $1; do 
    pattern+="${arg}.*" 
done 

grep -r ${pattern} $2 

但一行只搜索线,不找到文件:

“爱丽丝别的东西”

“新线有猫“

但它应该返回它。

一些帮助,将不胜感激。

迎接。

+0

我不清楚为什么它应该返回“爱丽丝别的东西”,但不是“猫有爱丽丝”?当“猫”不在时,为什么它应该返回“爱丽丝别的东西”? – jedwards

+0

如果你输入参数“爱丽丝猫”它必须在文件中的顺序相同,所以它不能返回“猫有爱丽丝”,因为“爱丽丝”之前是“猫” – tobi

+0

我明白,但包含“爱丽丝别的东西“根本不包含”猫“。 – jedwards

回答

1

是否

awk '/alice/,/cat/' file 

你想要做什么?

0

如果您删除文件中的换行符,那么grep将按照您的预期工作。

find $2 -type f | while read file; do 
    if tr '\n' ' ' < ${file} | grep -q -r ${pattern}; then 
    echo ${file} 
    fi 
done 
+0

没用猫的原因是什么? – Jens

+1

@jens tr不会将文件名作为参数。 – frankc

+0

'tr -d'\ n'<“$ file”' – Daenyth