【发布时间】:2012-04-30 19:32:00
【问题描述】:
我在 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
但它只逐行搜索,没有找到具有以下内容的文件:
“爱丽丝别的东西”
"新行有猫"
但它应该返回它。
我们将不胜感激。
问候。
【问题讨论】:
-
我不清楚为什么它应该返回“alice something else”而不是“cat has alice”?当“cat”不存在时,为什么要返回“alice something else”?
-
如果你输入参数“alice cat”,它必须以相同的顺序在文件中,所以它不能返回“cat has alice”,因为“alice”在“cat”之前跨度>
-
我明白,但包含“alice something else”的文件根本不包含“cat”。
-
当我输入“alice something else”时,它是文件的第一行,第二行是“新行有一只猫”
-
啊,那么是的,请参阅@frankc 中关于使用 grep 的多行正则表达式的相关 SO 问题。简而言之,你不能(使用 grep)。
标签: bash