2012-04-30 99 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