0

我必须使用 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 选项和 regex 的 grep 命令'.*INFO'。我成功地在不同的 grep 命令中分别打印了这两个文本,因为我希望在单个命令中这样做。

提前致谢。

4

2 回答 2

2
grep -o ".*INFO\|Param : [0-9]*"
于 2013-06-05T10:59:39.677 回答
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,用空格分隔。

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

于 2013-06-05T10:53:22.353 回答