【问题标题】:How do i match multiple strings of a line using grep command如何使用 grep 命令匹配一行的多个字符串
【发布时间】:2013-06-05 10:01:16
【问题描述】:

我必须使用 grep 命令查找和打印文件中匹配的一行字符串。

以下是示例文本:

04-06-2013 INFO blah blah blah blah Param : 39 another text Ending the line.
05-06-2013 INFO blah blah allah line 2 ending here with Param : 21.

我希望在 grep 命令之后打印如下输出

04-06-2013 INFO   Param : 39
04-06-2013 INFO   Param : 21

我尝试了带有 -o 选项和正则表达式 '.*INFO' 的 grep 命令。我成功地在不同的 grep 命令中分别打印了这两个文本,而我希望在单个命令中这样做。

提前致谢。

【问题讨论】:

  • 你需要的最简单的 grep 函数是 grep -o ".*INFO\|Param : [0-9]*"

标签: grep


【解决方案1】:
grep -o ".*INFO\|Param : [0-9]*"

【讨论】:

    【解决方案2】:

    我不确定您是否可以使用纯 grep 执行此操作,因为您需要能够指定带有分组术语的正则表达式,然后只打印出某些正则表达式组,而不是整个正则表达式匹配的所有内容 - 所以你会例如将(.*INFO)(.*)(Param : [0-9]*) 指定为正则表达式,然后仅打印组13(假设您从1 开始计数)。

    但是,您可以使用 sed 为您对输出进行后处理:

    % cat foo
    04-06-2013 INFO blah blah blah blah Param : 39 another text Ending the line.
    05-06-2013 INFO blah blah allah line 2 ending here with Param : 21.
    % grep 'Param :' foo | sed 's/\(.*INFO\)\(.*\)\(Param : [0-9]*\)\(.*\)/\1 \3/'
    04-06-2013 INFO Param : 39
    05-06-2013 INFO Param : 21
    

    我在上面所做的只是将匹配替换为 13 组,用空格分隔。

    我认为this question 是相关的(甚至可能是重复的)。

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 2014-12-03
      • 2011-05-28
      • 2016-06-05
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多