Linux 对于Solaris,grep-A的替代命令是什么?

Linux 对于Solaris,grep-A的替代命令是什么?,linux,shell,solaris,glassfish-3,Linux,Shell,Solaris,Glassfish 3,我试图从服务器日志文件中删除一些异常详细信息。 我试过这个: cat server.log | grep -A10 exception 这样我就可以得到异常的详细信息。 但服务器响应是: grep: illegal option -- A 在Solaris中是否有用于上述命令的备用命令?请提供帮助。根据 您可以尝试重新编译 如果您对Perl或python有足够的了解,那么像grep-a 10 exception files这样的命令不会占用很多行 下面是一个类似于cat file | gre

我试图从服务器日志文件中删除一些异常详细信息。 我试过这个:

cat server.log | grep -A10 exception
这样我就可以得到异常的详细信息。 但服务器响应是:

grep: illegal option -- A

在Solaris中是否有用于上述命令的备用命令?请提供帮助。

根据

您可以尝试重新编译

如果您对Perl或python有足够的了解,那么像
grep-a 10 exception files
这样的命令不会占用很多行

下面是一个类似于
cat file | grepa.pl exception
的Perl示例,显示在找到关键字后的10行上下文(或当前目录中的
/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--;
     }
}
#/usr/bin/perl
$CONTEXT=10;
$search=$ARGV[0]或die“需要搜索词!”;
$n=0;
while(){
$n=$CONTEXT+1 if(/$search/);
如果(n美元){
印刷品;
$n--;
}
}

该程序可以改进为将
$CONTEXT
作为参数给定,或搜索任何正则表达式。

根据

您可以尝试重新编译

如果您对Perl或python有足够的了解,那么像
grep-a 10 exception files
这样的命令不会占用很多行

下面是一个类似于
cat file | grepa.pl exception
的Perl示例,显示在找到关键字后的10行上下文(或当前目录中的
/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--;
     }
}
#/usr/bin/perl
$CONTEXT=10;
$search=$ARGV[0]或die“需要搜索词!”;
$n=0;
while(){
$n=$CONTEXT+1 if(/$search/);
如果(n美元){
印刷品;
$n--;
}
}

可以改进程序,使
$CONTEXT
作为参数给定,或搜索任何正则表达式。

使用awk可以实现与
grep-A
相同的行为:

awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
上面打印匹配项及其后面的十行,就像
grep-A10 exception server.log
A
的值可以随意更改

例子 考虑以下示例文件:

$ cat server.log
a
b
c
exception
1
2
3
4
5
设置为3时,输出如下:

$ awk -v A=3 '/exception/{f=A+1} f{print;f--}' server.log
exception
1
2
3
SunOS/Solaris的特别说明 Sun/Solaris上的本机awk充满了臭名昭著的bug。使用
nawk

更好的是
/usr/xpg4/bin/awk
/usr/xpg6/bin/awk
。例如:

/usr/xpg4/bin/awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
用多个文件模拟grep的行为 当给定多个文件名时,grep的输出更改为:

$ grep -A3 exception server.log server.log
server.log:exception
server.log-1
server.log-2
server.log-3
--
server.log:exception
server.log-1
server.log-2
server.log-3
我们也可以用awk模拟这一点(这可能需要GNU awk):


grep-A
相同的行为可以通过awk实现:

awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
上面打印匹配项及其后面的十行,就像
grep-A10 exception server.log
A
的值可以随意更改

例子 考虑以下示例文件:

$ cat server.log
a
b
c
exception
1
2
3
4
5
设置为3时,输出如下:

$ awk -v A=3 '/exception/{f=A+1} f{print;f--}' server.log
exception
1
2
3
SunOS/Solaris的特别说明 Sun/Solaris上的本机awk充满了臭名昭著的bug。使用
nawk

更好的是
/usr/xpg4/bin/awk
/usr/xpg6/bin/awk
。例如:

/usr/xpg4/bin/awk -v A=10 '/exception/{f=A+1} f{print;f--}' server.log
用多个文件模拟grep的行为 当给定多个文件名时,grep的输出更改为:

$ grep -A3 exception server.log server.log
server.log:exception
server.log-1
server.log-2
server.log-3
--
server.log:exception
server.log-1
server.log-2
server.log-3
我们也可以用awk模拟这一点(这可能需要GNU awk):


您也可以为此使用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
打印下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方法很简单。

您也可以使用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
打印下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方法很简单。

grep-a
在对多个文件进行grep和/或打印行号时添加一些格式;为了消除上下文中匹配项的歧义,匹配行上的文件名或行号后会打印一个冒号,而上下文行则会显示一个破折号。
grep-a
在对多个文件进行grep和/或打印行号时会添加一些格式;为了消除上下文中匹配项的歧义,在匹配行上的文件名或行号后面会打印一个冒号,而上下文行则会显示一个破折号。这在这里并不重要,但如果有多个模式,在循环之前编译正则表达式将是一个好主意。在这里,这并不重要,但是,如果您有多个模式,例如,在循环之前编译正则表达式将是一个好主意。Solaris的哪个版本?您可能有
/usr/gnu/bin/grep
/usr/sfw/bin/grep
,gnu grep具有-A选项。哪个版本的Solaris?gnu grep具有-A选项,您可以使用
/usr/gnu/bin/grep
/usr/sfw/bin/grep