我有一个文件的集合。 我想用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的商业案例,请告诉我们。
使用grep在文件“myfile.conf”中find具有“keyword1”或“keyword2”的行:
grep -e "keyword1\|keyword2" myfile.conf
pipe道的逃逸| 在zsh中至less需要带有反斜杠的字符。
要在目录中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来区分大小写。