编写SED命令:匹配到qrs时仅删除其上方对应的hij行
使用SED命令删除指定行上方紧邻的特定行
需求说明
给定原始文本:
abc def hij klm hij nop hij qrs tuv wxyz
要求仅在检测到qrs行时,删除其上方紧邻的那一行hij,处理后得到目标文本:
abc def hij klm hij nop qrs tuv wxyz
实现的SED命令
sed '/qrs/{x;d;};x' input.txt
如果是通过管道读取文本(比如从标准输入传入),可以直接使用:
cat input.txt | sed '/qrs/{x;d;};x'
命令原理解释
x:SED的核心操作,用于**交换模式空间(当前正在处理的行)和保持空间(临时存储缓冲区)**的内容/qrs/{x;d;}:当匹配到内容为qrs的行时,执行两个操作:x:交换保持空间和模式空间,此时保持空间中存储的正是qrs的上一行内容d:删除当前模式空间的内容(也就是刚交换过来的目标hij行)
- 最后的
x:对于所有非qrs的行,执行交换操作,把当前行存入保持空间,同时输出之前保持空间里存储的内容,确保正常输出所有不需要删除的行
内容的提问来源于stack exchange,提问作者prasannakpechu
相关产品推荐
相关产品推荐

