如果模式匹配复制模式行以及此后的 n 行到另一个文件

问题描述 投票:0回答:3

我正在寻找 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

但这只是匹配模式的复制行 我还必须复制第二行,因为第二行有它的链接

提前致谢

windows bash batch-file sed
3个回答
1
投票

使用

grep

grep -A1 'group-title=01-' orig.txt > copy.txt

在这里,GNU

grep
使用选项:

-A num, --after-context=num
:在每次匹配后打印
num
行尾随上下文。另见
-B
-C
选项。


1
投票

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
会这样做)。


0
投票

使用 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
© www.soinside.com 2019 - 2024. All rights reserved.