我想在文件中找到多个模式并删除该行和下一行。
即我想删除所有带有 .mkv .mp4 .avi 的行和(相应的)下一行。
我读了here写的内容,所以我尝试利用它并尝试就地更改文件(-i):
sed -ei '/.mkv/{N;d}; /.mp4/{N;d}; /.avi/{N;d}' ${myfile}
and also:
sed -ei '/.mkv/{N;d}; -e /.mp4/{N;d}; -e /.avi/{N;d}' ${myfile}
但这没有用。
唯一有效但实际上不是我的意思(因为我想要它就位)的是:
sed -e '/.mkv/{N;d};/.mp4/{N;d};/.avi/{N;d}' ${myfile} > 1.1
[ -f 1.1 ] && rm -f ${myfile} && mv 1.1 ${myfile}
所以问题是:如何找到多个模式并使用 sed 删除该行和下一行。
这可能对你有用(GNU sed):
sed -Ei '/\.(mkv|mp4|avi)\b/{N;d}' file
打开扩展正则表达式
-E
和内联替换 -i
。
如果一行包含句点,后跟
mkv
、mp4
或 avi
,后跟词尾,则追加下一行并删除两者。