【发布时间】:2016-08-01 19:20:09
【问题描述】:
我想将要搜索的文件扩展名传递给 grep 命令(在 bash 脚本中),使用 --include 参数。 这些文件扩展名将由用户从命令行作为参数输入(第 4 个参数包含文件扩展名,以逗号分隔)。
这是我的脚本:
...
echo "Searching in ${4} files for pattern"
egrep -irn . --include=\*.{"${4}"} --exclude=\*.{class} -e "${3}"
...
我也尝试使用命令创建一个字符串,然后调用 eval,如下所示:
...
comando="egrep -irn . --include="\\*.{${4}}" --exclude=\*.{class} -e "${3}""
echo $comando
resultado=eval $comando
echo $resultado
(回显comando时,我得到了这个:egrep -irn。--include=*.{wsdl,xml}--exclude=*.{class} -e texto,这正是commando 如果在命令行中执行会返回一些匹配项。)
我还尝试使用所有包含参数传递一个变量:
...
argumento="\\*.{${4}}"
egrep -irn . --include=$argumento --exclude=\*.{class} -e "${3}"
...
这是从命令行调用脚本的方式:
sh ./searchRecursiveIterativeEgrep.sh /tmp/test/another/ /usr/local/aux/ "texto" wsdl,xml
关于如何实现这一目标的任何想法? 谢谢
【问题讨论】:
-
查找文件的 UNIX 工具被恰当地命名为
find,而不是grep。忘记你曾经见过 GNU greps 选项来查找文件,因为添加它们是一个糟糕的主意(接下来是什么 - grep 选项来对输出进行排序?)并且只需使用find来查找文件和grep到 G全局搜索文件中的R常规E表达式并P打印匹配的文本。你的生活会简单得多。 -
我正在尝试在文件中查找正则表达式,所以我需要 grep。该命令按预期工作,但我无法使其与命令行中的参数一起工作。
-
a) grep 不是唯一可以在文件中查找正则表达式的工具 b) 我不是建议您不要使用 grep 在文件中查找正则表达式,我建议您不要不要使用 grep 来查找文件,因为这是错误的方法,并且会使您的 grep 命令变得异常复杂。使用
find查找文件并使用grep(或其他工具)在find找到的文件中搜索正则表达式。类似于find . -name '*.extension' -print0 | xargs -0 grep 'regexp'。 -
我没有提供我所有的脚本细节。我使用 find 查找文件,然后使用 grep 在找到的文件中查找模式
-
那你为什么还要使用 grep 来查找文件(-r、--include、--exclude)?根本就不要使用这些论点,它们被添加到与 UNIX 哲学相反,即让每个工具都完成一项工作并做好 - 只需使用为每项工作设计的工具。你已经在经历不这样做的痛苦。除了 - 祝你好运!