【问题标题】:searching exact match in a file using grep and awk command in linux在 linux 中使用 grep 和 awk 命令在文件中搜索完全匹配
【发布时间】:2021-08-03 07:05:23
【问题描述】:

我是 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 命令的答案。

【问题讨论】:

  • 为什么不使用ls -l performance_mrdb.log
  • 试试man ls,了解一下ls 命令。一般来说,如果您是 GNU/Linux 新手,请先学习man(用于手册)。因此,下一个在终端中输入man man 的命令。
  • 如果您一般对awk 感兴趣,您可以阅读About awk
  • 嗨@anubhava,如果我只想在单个命令中查看多个文件的结果,例如 performance_mrdb.log 和 issues.log 在单个命令中。你能告诉使用 grep 和 awk 的命令吗?
  • ls 接受许多参数,所以ls -l performance_mrdb.log problems.log 也可以工作

标签: linux bash awk grep


【解决方案1】:

也请为 awk 命令提供答案。

试试

your_ls_command | awk '$NF=="performance_mrdb.log"'

解释:仅打印最后一列 ($NF) 的内容为 performance_mrdb.log 的行。这使用 awks 对列的默认理解,即它确实假设列被 1 个或多个空格剪切。 NF 是内置的awk 变量之一,如果您想了解更多信息,请阅读8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

(在 gawk 4.2.1 中测试)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2019-09-22
    • 1970-01-01
    • 2011-12-19
    • 2015-08-17
    相关资源
    最近更新 更多