删除两个方向的 n 行以及 sed 中的匹配项?

2023-12-19

在运行之前删除匹配项和两行:

sed -i.bak -e '/match/,-2d' someCommonName.txt

运行后删除匹配项和两行:

sed -i.bak -e '/match/,+2d' someCommonName.txt

但是删除匹配项,其后两行和其前两行不起作用?

sed -i.bak -e '/match/-2,+2d' someCommonName.txt
sed: -e expression #1 unknown command: `-'

这是为什么?


sed对一系列地址进行操作。这意味着一个或两个表达式,而不是三个。

/match/是与正则表达式匹配的地址。

-2是一个地址,指定前两行

+2是一个地址,指定后面两行

所以:

/match/,-2是指定行匹配的范围match到前两行。

/match/-2,+2d另一方面,包含三个地址,因此没有意义。

要删除模式之前和之后的两行,我会推荐这样的东西(从此答案修改 https://stackoverflow.com/a/20819408/2101267):

sed -n "1N;2N;/\npattern$/{N;N;d};P;N;D"

这会在缓冲区中保留 3 行并读取文件。当在最后一行找到该模式时,它会再读取两行并删除所有 5 行。请注意,如果该模式位于文件的前两行中,则此操作将不起作用,但它是一个开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除两个方向的 n 行以及 sed 中的匹配项? 的相关文章

随机推荐