我正在尝试从服务器日志文件中查找一些异常详细信息。 我试过这个:
cat server.log | grep -A10 exception
这样我就可以得到异常细节。 但服务器响应是:
grep: illegal option -- A
Solaris上是否有备用命令?请帮忙。
答案 0 :(得分:0)
根据man,var id = this.id;
上下文(和有用)选项似乎不属于Solaris -A
的一部分。
您可以尝试重新编译grep source code。
如果您知道足够的Perl或python,grep
这样的命令就不会占用很多行。
这是一个Perl示例,其工作方式类似grep -A 10 exception files
,在找到关键字后显示10行上下文(或当前目录中的cat file | grepa.pl exception
)。
<强> grepa.pl 强>
./grepa.pl
可以改进程序以将#!/usr/bin/perl
$CONTEXT = 10;
$search = $ARGV[0] or die "need search term!";
$n = 0;
while(<STDIN>) {
$n = $CONTEXT+1 if (/$search/);
if ($n) {
print;
$n--;
}
}
作为参数给出,或搜索任何正则表达式。
答案 1 :(得分:0)
使用awk可以实现与console.log
相同的行为:
#include "Queen.h"
void changeToQueen(Piece* mx)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
mx[i][j] = new Queen();
}
}
}
int main()
{
Piece * matrix[7][7];
changeToQueen(matrix); // this fails
return 0;
}
以上打印匹配及其后的十行,就像grep -A
一样。 awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
的值可以随意更改。
考虑这个示例文件:
grep -A10 exception server.log
如果A设置为3,则输出如下:
A
Sun / Solaris上的本机awk是众所周知的错误填充。取而代之的是使用$ cat server.log
a
b
c
exception
1
2
3
4
5
或
更好的是$ awk -v A=3 '/exception/{f=A+1} f{print;f--}' server.log
exception
1
2
3
或nawk
。例如:
/usr/xpg4/bin/awk
当给出多个文件名时,grep的输出变为:
/usr/xpg6/bin/awk
我们也可以用awk模拟这个(这可能需要GNU awk):
/usr/xpg4/bin/awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
答案 2 :(得分:0)
您也可以使用sed:
打印下10行,包括包含匹配模式的行。
sed -n '/pattern/{p;n;p;n;p;n;p;n;p;n;}/' file_name
打印下一行,不包括包含匹配模式的行。
sed -n '/pattern/{n;p;n;p;n;p;n;p;n;p;}/' file_name
您可以通过添加或删除n和p来播放要显示的行数。如果数字很大,awk是一个更好的选择,但sed方法很容易。