在aix / ksh shell之前和之后的grep行

时间:2013-09-25 17:17:56

标签: linux shell unix ksh aix

我想在匹配的模式之前和之后提取行。

例如:如果文件内容如下

absbasdakjkglksagjgj
sajlkgsgjlskjlasj
hello
lkgjkdsfjlkjsgklks
klgdsgklsdgkldskgdsg

我需要在'hello'

之前和之后找到你好和显示行

输出应为

sajlkgsgjlskjlasj
hello
lkgjkdsfjlkjsgklks

这对GNU来说是可行的,但是我需要一个在AIX / KSH SHELL中没有安装GNU的方法。

4 个答案:

答案 0 :(得分:1)

sed -n '/hello/{x;G;N;p;};h' filename

答案 1 :(得分:0)

我发现一次构建GNU coreutils通常不那么令人沮丧,并从更多功能中受益http://www.gnu.org/software/coreutils/

答案 2 :(得分:0)

由于您将在计算机上安装Perl,因此您可以使用以下代码,但您可能最好安装GNU实用程序。对于之前的行,此选项为-b n1,对于匹配后的行,此选项为-f n1。它适用于PCRE匹配(因此,如果您需要不区分大小写的匹配,请在正则表达式之后添加i,而不是使用-i选项。我没有实现-v或{{1}我不需要那些。

-l

答案 3 :(得分:0)

我有一种情况,我在平板电脑上遇到了一个缓慢的telnet会话,信不信由你,我无法用键盘轻松编写Perl脚本。我想出了这个hacky操作,在AIX的有限grep中为我工作。如果你的grep返回数百行,这将无法正常工作,但如果你只需要一行和一行或两行以下,这可以做到。首先我跑了这个:

cat -n filename |grep criteria

通过包含-n标志,我看到了我正在寻找的数据的行号,如下所示:

2543 my crucial data

由于cat给出的行号前面有2个空格,后面有1个空格,我可以在它之前插入行号

cat -n filename |grep " 2542 "

我跑了几次,给了我2542行和2544行预订了第2543行。就像我说的那样,它肯定是可以挽回的,就好像你有大量的数据可能有“2542”到处都是,但只是抓住几条快速线,它运作良好。