我有一组文件。我想通过搜索来grep
查找全部和唯一那些包含其中任何地方的两个都琴弦keyword1
和 keyword2
。
我也想知道如何使用 awk 来做到这一点。
答案1
对于 grep,管道符号将组合正则表达式中的字符串分隔开;在某些系统上,可能需要使用 egrep 来激活此功能:
[madhatta@anni ~]$ egrep 'exact|obsol' /etc/yum.conf
exactarch=1
obsoletes=1
我希望 awk 的语法类似。
编辑:是的:
[madhatta@anni ~]$ awk '/exact|obsol/ {print $1}' /etc/yum.conf
exactarch=1
obsoletes=1
编辑2:
您已经阐明了您的请求,因此下面介绍如何使用 grep 来执行此操作:
grep -l keyword1 * | xargs -d '\n' grep -l keyword2
这将在给定目录 ( *
) 中的所有文件中搜索 keyword1,并将匹配文件列表传递到第二个 grep,后者将通过 xargs 搜索第二个字符串。恐怕我不会费心去做这件事,awk
因为它听起来有点像家庭作业问题。如果您有使用 awk 的商业案例,请告诉我们。
答案2
在一个文件中搜索
使用 grep 在文件“myfile.conf”中查找包含“keyword1”或“keyword2”的行:
grep -e "keyword1\|keyword2" myfile.conf
|
在 zsh 中至少需要使用反斜杠对管道字符进行转义。
在目录中的所有文件中搜索
要在目录中搜索包含“关键字1”或“关键字2”的文件:
grep -r -e "keyword1\|keyword2" /path/to/my/directory
如果您想进行不区分大小写的搜索,-i
也请添加该选项。
答案3
如果我理解正确的话,你想搜索包含以下文件的所有文件keyword1
和 keyword2
在特定的文件夹中,所以,尝试这个:
$ find /path/to/folder -type f -print0 | xargs -0 grep -li "keyword1" | \
xargs -I '{}' grep -li "keyword2" '{}'
-print0 | xargs -0
注意文件名中有空格-I
告诉用参数列表xargs
替换'{}'
grep -li
打印文件名而不是匹配模式。我使用-i
它来区分大小写。