在 linux 中使用 grep 和 awk 命令在文件中搜索完全匹配项
searching exact match in a file using grep and awk command in linux
我是 linux 的新手,正在尝试学习一些命令。
在一个目录下我有很多文件
-rw-rw---- 1 mnp8u mnp8u 16440 Aug 3 08:57 mnpcOutboundAdapter.log
-rw-rw---- 1 mnp8u mnp8u 11394510 Aug 3 08:57 x400.log
-rw-rw---- 1 mnp8u mnp8u 3838561 Aug 3 08:57 performance_cm_workflow.log
-rw-rw---- 1 mnp8u mnp8u 216723 Aug 3 08:57 controllerProcess.log
-rw-rw---- 1 mnp8u mnp8u 4192538 Aug 3 08:57 SP117Process.log
-rw-rw---- 1 mnp8u mnp8u 25689061 Aug 3 08:57 cmserver.log
-rw-rw---- 1 mnp8u mnp8u 1783658 Aug 3 08:57 receiverProcess.log
-rw-rw---- 1 mnp8u mnp8u 8132403 Aug 3 08:57 performance_outbound_adapter.log
-rw-rw---- 1 mnp8u mnp8u 949876 Aug 3 08:57 mnpcOutboundAdapter.log.1
-rw-rw---- 1 mnp8u mnp8u 5499756 Aug 3 08:57 cm_http_server.log
-rw-rw---- 1 mnp8u mnp8u 587538 Aug 3 08:57 mrdbSenderProcess.log
-rw-rw---- 1 mnp8u mnp8u 8716088 Aug 3 08:57 performance_mrdb.log
我已跳过文件以减少长度。
在这个目录中,对于一个特定的文件名,如 performance_mrdb.log,它有像 performance_mrdb.log.1、performance_mrdb.log.2 等文件
所以,当我使用简单的 grep 命令时
ls -lrt |grep performance_mrdb.log
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 10:18 performance_mrdb.log.10
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 10:30 performance_mrdb.log.9
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 10:41 performance_mrdb.log.8
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 10:51 performance_mrdb.log.7
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 11:02 performance_mrdb.log.6
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 11:13 performance_mrdb.log.5
-rw-rw---- 1 mnp8u mnp8u 10240026 Jul 15 00:03 performance_mrdb.log.4
-rw-rw---- 1 mnp8u mnp8u 10240078 Jul 20 10:14 performance_mrdb.log.3
-rw-rw---- 1 mnp8u mnp8u 10240053 Jul 26 09:24 performance_mrdb.log.2
-rw-rw---- 1 mnp8u mnp8u 10240023 Jul 30 00:28 performance_mrdb.log.1
-rw-rw---- 1 mnp8u mnp8u 8716652 Aug 3 08:58 performance_mrdb.log
它显示了名称中包含 performance.mrdb.log 的所有文件。但我只想查看 performance_mrdb.log 文件。
是否有任何选项可以让我使用 grep 命令搜索精确匹配。请也为 awk 命令建议答案。
也请建议 awk 命令的答案。
尝试
your_ls_command | awk '$NF=="performance_mrdb.log"'
说明:仅打印最后一列 ($NF
) 内容为 performance_mrdb.log
的行。这使用 awk
对列的默认理解,即它确实假设列被 1 个或多个空格剪切。 NF
是内置 awk
变量之一,如果您想了解更多信息,请阅读 8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR.
(在 gawk 4.2.1 中测试)
我是 linux 的新手,正在尝试学习一些命令。
在一个目录下我有很多文件
-rw-rw---- 1 mnp8u mnp8u 16440 Aug 3 08:57 mnpcOutboundAdapter.log
-rw-rw---- 1 mnp8u mnp8u 11394510 Aug 3 08:57 x400.log
-rw-rw---- 1 mnp8u mnp8u 3838561 Aug 3 08:57 performance_cm_workflow.log
-rw-rw---- 1 mnp8u mnp8u 216723 Aug 3 08:57 controllerProcess.log
-rw-rw---- 1 mnp8u mnp8u 4192538 Aug 3 08:57 SP117Process.log
-rw-rw---- 1 mnp8u mnp8u 25689061 Aug 3 08:57 cmserver.log
-rw-rw---- 1 mnp8u mnp8u 1783658 Aug 3 08:57 receiverProcess.log
-rw-rw---- 1 mnp8u mnp8u 8132403 Aug 3 08:57 performance_outbound_adapter.log
-rw-rw---- 1 mnp8u mnp8u 949876 Aug 3 08:57 mnpcOutboundAdapter.log.1
-rw-rw---- 1 mnp8u mnp8u 5499756 Aug 3 08:57 cm_http_server.log
-rw-rw---- 1 mnp8u mnp8u 587538 Aug 3 08:57 mrdbSenderProcess.log
-rw-rw---- 1 mnp8u mnp8u 8716088 Aug 3 08:57 performance_mrdb.log
我已跳过文件以减少长度。
在这个目录中,对于一个特定的文件名,如 performance_mrdb.log,它有像 performance_mrdb.log.1、performance_mrdb.log.2 等文件
所以,当我使用简单的 grep 命令时
ls -lrt |grep performance_mrdb.log
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 10:18 performance_mrdb.log.10
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 10:30 performance_mrdb.log.9
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 10:41 performance_mrdb.log.8
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 10:51 performance_mrdb.log.7
-rw-rw---- 1 mnp8u mnp8u 10240007 Jul 11 11:02 performance_mrdb.log.6
-rw-rw---- 1 mnp8u mnp8u 10240033 Jul 11 11:13 performance_mrdb.log.5
-rw-rw---- 1 mnp8u mnp8u 10240026 Jul 15 00:03 performance_mrdb.log.4
-rw-rw---- 1 mnp8u mnp8u 10240078 Jul 20 10:14 performance_mrdb.log.3
-rw-rw---- 1 mnp8u mnp8u 10240053 Jul 26 09:24 performance_mrdb.log.2
-rw-rw---- 1 mnp8u mnp8u 10240023 Jul 30 00:28 performance_mrdb.log.1
-rw-rw---- 1 mnp8u mnp8u 8716652 Aug 3 08:58 performance_mrdb.log
它显示了名称中包含 performance.mrdb.log 的所有文件。但我只想查看 performance_mrdb.log 文件。
是否有任何选项可以让我使用 grep 命令搜索精确匹配。请也为 awk 命令建议答案。
也请建议 awk 命令的答案。
尝试
your_ls_command | awk '$NF=="performance_mrdb.log"'
说明:仅打印最后一列 ($NF
) 内容为 performance_mrdb.log
的行。这使用 awk
对列的默认理解,即它确实假设列被 1 个或多个空格剪切。 NF
是内置 awk
变量之一,如果您想了解更多信息,请阅读 8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR.
(在 gawk 4.2.1 中测试)