SED:显示前10行复杂表达式

时间:2014-04-22 22:21:20

标签: linux bash sed

如何使用sed查找单词linux的行?后来用linux这个词显示第一行10? EX:

cat file | sed -e '/linux/!d' -e '10!d' ### I can not display the first 10 lines of the word linux

cat file | sed '/linux/!d' | sed '10!d' ### It is well

如何让它与一个sed一起使用?

cat file | sed -e '/linux/!d; ...?; 10!d'

...? - 存储缓冲区linux? 10后来切线?

有人向我解释过吗?

4 个答案:

答案 0 :(得分:5)

我会使用awk

awk '/linux/ && c<10 {print;c++} c==10 {exit}' file

答案 1 :(得分:3)

这可能适合你(GNU sed):

sed -nr '/linux/{p;G;/(.*\n){10}/q;h}' file

如果包含所需的字符串,则打印该行。如果已经打印了所需的行数,则退出,否则将行和前一行存储在保留空间中。

答案 2 :(得分:1)

您可以使用perl

perl -ne 'if (/linux/) {print; ++$a;}; last if $a==10' inputfile

使用GNU sed:

sed -rn "/linux/{p;x;s/^/P/;ta;:a;s/^P{10}$//;x;Tb;Q;:b}" filename

答案 3 :(得分:0)

感谢。你很棒。所有的例子都很好看。哇:)遗憾的是我无法做到这一点。 我没见过&#39; r&#39; sed中的选项。我需要学习。

echo -e 'windows\nlinux\nwindows\nlinux\nlinux\nwindows' | sed -nr '/linux/{p;G;/(.*\n){2}/q;h}'

效果很好。

echo -e 'windows\nlinux\nwindows\nlinux\nlinux\nwindows' | sed -nr '/linux/{p;G;/(.*\n){2}/q;h}' | sed '2s/linux/debian/'

我可以再问你一个例子吗?如何在一个sed获得结果?