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

如何使用grep命令匹配一行的多个字符串,grep,Grep,我必须使用grep命令只查找并打印文件中一行的匹配字符串 下面是示例文本: 04-06-2013信息废话废话参数:39行末尾的另一个文本。 2013年6月5日信息-废话-废话-安拉2号线以参数21结尾。 我希望输出在grep命令后打印如下 04-06-2013信息参数:39 04-06-2013信息参数:21 我用-o选项和regex'.*INFO'尝试了grep命令。我成功地在不同的grep命令中分别打印了这两个文本,正如我希望在单个命令中一样 提前谢谢 我不确定您是否可以使用纯grep实

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

下面是示例文本:

04-06-2013信息废话废话参数:39行末尾的另一个文本。
2013年6月5日信息-废话-废话-安拉2号线以参数21结尾。
我希望输出在grep命令后打印如下

04-06-2013信息参数:39
04-06-2013信息参数:21
我用-o选项和regex
'.*INFO'
尝试了grep命令。我成功地在不同的grep命令中分别打印了这两个文本,正如我希望在单个命令中一样


提前谢谢

我不确定您是否可以使用纯grep实现这一点,因为您需要能够使用分组术语指定正则表达式,然后只打印出某些正则表达式组,而不是整个正则表达式匹配的所有内容-因此您可以指定
(.*INFO)(.*)(参数:[0-9]*)
作为正则表达式,然后只打印组
1
3
(假设从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
我在上面所做的是用空格分隔的组
1
3
替换匹配


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

我不确定您是否可以使用纯grep来实现这一点,因为您需要能够使用分组术语指定正则表达式,然后只打印某些正则表达式组,而不是整个正则表达式匹配的所有内容-因此您可以指定
(.*INFO)(.*)(参数:[0-9]*)
作为正则表达式,然后只打印组
1
3
(假设从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
我在上面所做的是用空格分隔的组
1
3
替换匹配


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

您需要的最简单的grep函数是grep-o。“*INFO\| Param:[0-9]*”您需要的最简单的grep函数是grep-o。“*INFO\| Param:[0-9]*”