windows sed如果模式匹配,则将模式行沿着其后n行复制到另一个文件

dpiehjr4  于 2023-03-13  发布在  Windows
关注(0)|答案(3)|浏览(167)

我正在寻找一个sed命令,以匹配模式和复制模式行和n数量的行后此行。模式是010203序列。
示例:

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

但这只是复制行匹配模式。我必须复制第二行也作为第二行有它的链接。

4xrmg8kj

4xrmg8kj1#

使用grep

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

在这里,GNU grep使用选项:
-A num, --after-context=num:在每次匹配后打印num行尾随上下文。另请参阅-B-C选项。

0yg35tkg

0yg35tkg2#

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;}找到匹配的行时,它将print该行,获得next行,并print该行。
注意,它不会注意到额外行中的其他匹配项,因此,例如,如果一行中有两个匹配行,它会打印它们,但不会像您所期望的那样打印下一行(grep -A会这样做)。

pzfprimi

pzfprimi3#

使用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

相关问题