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
。