如何在单行sed命令中删除匹配字符串的上1行及下2行?
解决sed删除匹配行上一行、自身及后两行的问题
要实现你需要的效果——删除# My Comment Text的上一行、该行本身以及之后的2行,只需要调整sed的地址范围,把前一行纳入删除区间即可。这里有个直接可用的单行命令:
sed -i '/# My Comment Text/-1,/# My Comment Text/+2d' /etc/crontab
命令原理拆解:
/# My Comment Text/-1:定位到包含目标注释的行的前一行/# My Comment Text/+2:定位到包含目标注释的行的后2行d:删除这个地址范围内的所有行(总共4行:前一行、匹配行、后两行)
容错优化(可选):
如果担心目标行是文件的第一行(此时-1会导致sed报错),可以加个条件判断跳过第一行的处理:
sed -i '1!{/# My Comment Text/-1,/# My Comment Text/+2d}' /etc/crontab
1!表示“除第一行外”,这样当匹配行是第一行时,不会执行删除操作,避免出现错误。
内容的提问来源于stack exchange,提问作者Dennis Smink
相关产品推荐
相关产品推荐

