sed命令删除包含指定字符串行的上一行

sed -i -e :a -e '$!N;s/.*\n\("字符串"\)/\1/;ta' -e 'P;D' 文件名
这是网上找的资料,命令执行时不报错。但是,对文件没有任何改动。
sed -i -e :a -e '$!N;s/.*\n\("字符串"\)/\1/;ta' -e 'P;d' 文件名
这是我改动了一下,命令倒是执行了,命令也不报错。但却把指定行的上一行删除之外,也把指定行的下一行也删了,好像还隔行删了更多的行。
命令究竟应该如何写?请测试成功后再回答。
晕,才提出问题,就找到解决的办法了:
sed -i 'N;/\n.*关键字/!P;D' 文件名
求对这条命令的详细解释。

sed -i 'N;/\n.*关键字/!P;D' 文件名

-i 直接对文件进行修改
N; ——多行模式,读入下一行
\n——匹配换行符,保证后面搜索内容是在第二行中
.*关键字 ——点星是任意字符,后面是搜索内容
/ /!P; ——前面的正则没有搜到(没有匹配)则执行多行打印【模式空间中的两行都打印】
D——模式空间中的两行全部删除【并再读入下一行】
温馨提示:答案为网友推荐,仅供参考
相似回答