如何在仍然写入同一文件的同时过滤掉特定的行?

How can I filter out specific lines while still writing to the same file?

我给自己定了一个 小的 项目,涉及 StevenBlack's host file。我知道他提供了一种使用他的 Python 脚本制作您自己的主机文件的方法,但是我想给自己设定一个挑战。

问题如下:

我有一个获取 Fakenews+Gambling+Social 主机文件的脚本。

不过,我还是想访问 Reddit。更糟糕的是,该文件会不断更新。这意味着我无法删除带有 sed -e '123,456d'.

的行

我想我已经很接近了。但我不确定,这是命令

cat ./hosts | grep "# Reddit" -A10 | sed -e '1,11d'

虽然它确实删除了 Reddit 条目,但我不知道如何将其重新组合在一起。意思是,使用上面的命令我确实可以过滤掉 Reddit 行,但我不知道如何放回主机文件而不是创建一个空文件。

这是我的第一个post,我很不擅长解释问题。如果有任何需要澄清的地方,就直说吧。另外,英语不是我的第一语言,所以这也无济于事。

编辑:例子

cd /home/myname/Documents/git

wget https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-social/hosts

至此,我有了原始主机文件。现在我想过滤掉 Reddit。我要删除的条目是:

Reddit

0.0.0.0 reddit.com

0.0.0.0 www.reddit.com

0.0.0.0 i.reddit.com

0.0.0.0 redd.it

问题来了。我不知道如何从主机文件中删除它们,因为行在不断变化。

我的方法是cat ./hosts | grep "# Reddit" -A10 | sed -e '1,11d',事后看来这很没用。

您可以在下载时过滤它们:

wget "$url" -O- | grep -v 'redd.\?it' > hosts