如何使用grep命令匹配一行的多个字符串

时间:2013-06-05 10:01:16

标签: grep

我必须使用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命令中单独打印文本,我想在单个命令中使用它。

先谢谢。

2 个答案:

答案 0 :(得分:2)

grep -o ".*INFO\|Param : [0-9]*"

答案 1 :(得分:1)

我不确定你是否可以使用纯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是相关的(甚至可能是重复的)。