4

我正在分析来自我的服务器的日志文件(特别是那里的几行)。但这些行的长度约为 1000 到 2000 个字符。

这是一个示例,这些行是如何与以下命令一起出现grepless

tail -n 1000 log.log | grep 'SOME_TEXT' | less

输出:

random text SOME_TEXT another 1000 chars
random SOME_TEXT 2000 chars
text text SOME_TEXT 2000 chars

但是我很难将它们分开,因为它们是满屏的文字(也不令人赏心悦目)。我想让我的输出像打击:

random text SOME_TEXT another 1000 chars

random SOME_TEXT 2000 chars

text text SOME_TEXT 2000 chars

我修改了上面的命令sed

tail -n 1000 log.log | grep 'SOME_TEXT' | sed 's/\n/\n\n/' | less

它没有用,所以我尝试了tr下一个:

tail -n 1000 log.log | grep 'SOME_TEXT' | tr '\n' '\n\n' | less

它也对我不起作用。我在这里想念什么?

4

4 回答 4

7

这可能对您有用:

sed G file
于 2014-02-05T09:22:14.880 回答
2
tail -n 1000 log.log | sed -n '/SOME_TEXT/ {G;p;}' 

使用保持缓冲区

您也可以将行编号为分隔符

tail -n 1000 log.log | sed -n '/SOME_TEXT/ {=;p;}'
于 2014-02-05T09:27:00.197 回答
2

这将仅在其后搜索pattern和打印pattern一个额外的空白行。

awk '/SOME_TEXT/ {print $0 RS}' file

例子:

cat file
test
more
SOME_TEXT my data
more
even more
SOME_TEXT need more
more data
yes

awk '/SOME_TEXT/ {print $0 RS}' file
SOME_TEXT my data

SOME_TEXT need more

打印所有文本,后面有一个空行pattern

awk '8; /SOME_TEXT/ {print ""}' file
test
more
SOME_TEXT my data

more
even more
SOME_TEXT need more

more data
yes
于 2014-02-05T07:53:07.663 回答
2

你可以试试sed这个

sed '/SOME_TEXT/s/.*/&\n/g' logfile.log

或者

sed '/SOME_TEXT/G' logfile.log
于 2014-02-05T07:54:14.457 回答