1

我在 bash 中有一些工作要做。它是这样的:

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

例如:bash mybash "alice cat" . 它应该返回包含例如:“alice has a cat”,“alice cat”,但不是“cat has alice”的文件

我做了这样的事情

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

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

grep -r ${pattern} $2

但它仅逐行搜索,找不到具有以下内容的文件:

“爱丽丝别的东西”

“新线有猫”

但它应该返回它。

一些帮助将不胜感激。

问候。

4

2 回答 2

1

awk '/alice/,/cat/' file

做你想做的事?

于 2012-04-30T21:42:58.630 回答
0

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

find $2 -type f | while read file; do
  if tr '\n' ' ' < ${file} | grep -q -r ${pattern}; then
    echo ${file}
  fi
done
于 2012-04-30T20:12:05.000 回答