如何使用sed从文件中删除特定行

在某些情况下,我们需要从一个或多个文件中删除特定的一行,例如,发生在我身上的是一个完整的文件列表,我需要删除所有这些中的第27行(第27行是ACL的行) ,规范,规则,配置),或者我可以逐个文件地编辑文件,或者可以使用命令来实现所需的功能 口渴 和bash脚本(可选)。

但是,让我们尝试一个简单的文件。

我们有文件 发行版-deb.txt 其中包含:

Debian的

库本图

ArchLinux的

溶质

薄荷

换句话说,文件 发行版-deb.txt 我们将在其中放置基于Debian的发行版,但在第3行中看到“ archlinux”,该发行版显然与Debian无关,因此我们必须删除该行。 为了消除该文件的第3行,我们将放置以下内容:

sed "3d" distros-deb.txt > distros-deb-ok.txt

解释这条线有些容易, 渴“ 3d” 我们表示我们将删除第3行, 发行版-deb.txt 我们指示要处理的文件,即删除该文件的第3行,如果按Enter键,则显示到此处,它将在终端中显示我们想要的内容,因此 > distros-deb-ok.txt 我们指出,它不是将结果显示在终端中,而是将其放入具有此名称的文件中。

有什么简单的?

另外,我们可以避免使用 > distros-deb-ok.txt 使用适当的参数 口渴,参数 -i

也就是说,如果我们要从文件中删除该行并以相同的名称保存(而不是在另一个文件中),只需添加参数 -i :

sed -i "3d" distros-deb.txt

这将从distros-deb.txt中删除第3行并保存。

如果我想要一系列的行,那就是删除第3行,同时删除#4和#5,该怎么办? 为此,我们将范围设置为3到5,即:

sed -i "3,5d" distros-deb.txt

它只会向我显示 debian 和 kubuntu 

那么,如果我不知道总行数又想从第2行删除到最后一行怎么办?

只需使用美元符号-»$

sed -i "2,$d" distros-deb.txt

如果您想从第一行中消除到#4,那么我们只需将值1放在开头:

sed -i "1,4d" distros-deb.txt

这就是一切,这是一个非常有用的技巧,当您要制作bash脚本以使任务自动化并且需要修改和消除配置文件行时,我们可以使用 口渴 o perl的,以及消除我们已经知道如何使用 sed 

问候


在 Google 中将其添加为首选来源