如何使用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后来切线?
有人向我解释过吗?
答案 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获得结果?