我正在寻找 sed 命令来匹配模式和复制模式行以及此行之后的 n 行。 模式是 01 , 02 , 03 序列
例子
group-title=01- line1
http://www.yahoo.com
group-title=02- local3
http://www.altavista.com
group-title=01- koko1
http://www.bbc.com
所需输出
group-title=01- line1
http://www.yahoo.com
group-title=01- koko1
http://www.bbc.com
我试过了
sed -n "/01- /p" orignal.txt > copyof.txt
但这只是匹配模式的复制行 我还必须复制第二行,因为第二行有它的链接
提前致谢
使用
grep
:
grep -A1 'group-title=01-' orig.txt > copy.txt
grep
使用选项:
-A num, --after-context=num
:在每次匹配后打印 num
行尾随上下文。另见 -B
和 -C
选项。
grep -A
是更好的方法(参见 Timur Shtatland 的回答),但如果您真的想用 sed
来做,方法如下:
sed -n "/01- / {p;n;p;}" # print match + next line
sed -n "/01- / {p;n;p;n;p;}" # print match + next 2 lines
解释:当它找到匹配的行时,
{p;n;p;}
将 p打印该行,获取 next 行,然后 p打印该行。
请注意,这不会注意到正在打印的额外行中的其他匹配项。因此,例如,如果连续有两条匹配行,它将打印它们,但不会像您预期的那样打印下一行(并且
grep -A
会这样做)。
使用 GNU
sed
$ sed -Ez ':a;s/(([^=]*=)01-[^=]*)\20[02-9][^=]*\n/\1/;ta' input_file
group-title=01- line1
http://www.yahoo.com
group-title=01- koko1
http://www.bbc.com