sed 多个不同的模式:删除模式后面的行和下一行

问题描述 投票:0回答:1

我想在文件中找到多个模式并删除该行和下一行。

即我想删除所有带有 .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 删除该行和下一行。

sed
1个回答
0
投票

这可能对你有用(GNU sed):

sed -Ei '/\.(mkv|mp4|avi)\b/{N;d}' file

打开扩展正则表达式

-E
和内联替换
-i

如果一行包含句点,后跟

mkv
mp4
avi
,后跟词尾,则追加下一行并删除两者。

© www.soinside.com 2019 - 2024. All rights reserved.