在运行之前删除匹配项和两行:
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(使用前将#替换为@)