如何在使用awk或grep时使用多个关键字进行search?

我有一个文件的集合。 我想用grepsearch它们,find所有并且只包含stringkeyword1 keyword2任何地方。

我也想知道如何用awk做到这一点。

对于grep,pipe道符号以组合regexp分隔string; 在某些系统上,可能需要使用egrep来激活这个function:

 [madhatta@anni ~]$ egrep 'exact|obsol' /etc/yum.conf exactarch=1 obsoletes=1 

我期望awk的语法是类似的。

编辑: yup:

 [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 

这将search给定目录( * )中的所有文件作为keyword1,将匹配文件的列表传递给第二个grep,它将通过xargssearch第二个string。 我害怕我不会用awk来做这件事,因为它开始听起来有点像功课问题。 如果您有使用awk的商业案例,请告诉我们。

在一个文件中search

使用grep在文件“myfile.conf”中find具有“keyword1”或“keyword2”的行:

 grep -e "keyword1\|keyword2" myfile.conf 

pipe道的逃逸| 在zsh中至less需要带有反斜杠的字符。

search目录中的所有文件

要在目录中search包含“keyword1”或“keyword2”的文件,请执行以下操作:

 grep -r -e "keyword1\|keyword2" /path/to/my/directory 

如果您要执行不区分大小写的search,请同时添加-i选项。

如果我理解正确,你想要search包含关键字1 keyword2在特定文件夹中的所有文件,所以,试试这个:

 $ find /path/to/folder -type f -print0 | xargs -0 grep -li "keyword1" | \ xargs -I '{}' grep -li "keyword2" '{}' 
  • -print0 | xargs -0 -print0 | xargs -0使用空格处理文件名
  • -I告诉xargs用参数列表replace'{}'
  • grep -li打印文件名而不是匹配模式。 我使用-i来区分大小写。