我有一个包含如下数据的文件:
找到匹配项789时,我想删除上述两行(123和456)。是否可以用sed或awk做到这一点?请帮忙
使用ed
,标准编辑器:
ed -s file <<< $'3,$g/789/-2,.d\nw'
ed
将看到以下命令:
3,$g/789/-2,.d
w
解释:
3,$g/789/
将标记从第3 *行到文件末尾的所有匹配的行/789/
; 然后,对于每个标记的行,它将执行以下命令:
-2,.d
这意味着:删除范围-2,.
,即从当前行上方的两行(-2
)到此处结束(.
)的范围。
然后w
意味着写入文件。如果您想先尝试而不写入文件,而是在终端上打印(出于测试目的),请使用和替换w
命令:,p
Q
ed -s file <<< $'3,$g/789/-2,.d\n,p\nQ'
笔记。ed
真正地编辑文件(它是一个编辑器),因此它将快乐地保留符号链接和权限,这与依赖于对流(sed
和awk
)有用的工具的所有其他方法不同。
笔记。如果您的模式出现在前两行中,它将被保留(不过,可以通过添加一些额外的命令来处理它);如果您的图案出现在2行范围内,那么您可能会感到有些惊讶,例如,
000
123
456
789
123
789
将产生一个空文件,并且
123
456
789
123
789
你会得到一个错误。
*范围从第3行开始,以防万一您的模式出现在前两行中而导致错误
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句