linux中如何删除文件中的指定行
来源:网络收集 点击: 时间:2024-03-13指定的行可以分为两类,分别是:
1. 符合指定条件的行
2. 指定行号的行
我们先来看符合指定条件的行。在linux服务器管理过程中,很多配置文件里的注释非常长,如下面图中所示,是一个postgresql的配置文件,配置只有两行,但是注释可能有10几行。这种情况比较常见。

因此就需要通过正则表达式来去掉里面指定的注释行或者空行。上面的postgresql图片示例中注释太多,不太好看清楚,我们这里使用一个nginx的配置文件,如下面第一张,前面有3行#号开头的注释,后面有若干行配置文件。
在正则表达式里,^符号表示开头,$符号表示结尾。因此空白的行就可以表示为^$,即一个开头,一个结尾,中间没有任何符号,如下面第二张图中所示,通过grep命令来查找,-v选项表示排除符合条件的选项。即找出所有非空行。可以看到,结果中显示了所有的注释行和配置行,空白行被删除了。


以#号开头的行,按照上面说到的规则,就可以表示为^#,如下面图中所示,通过grep 命令的-v选项,排除掉以#号开头的行,就会显示出所有的配置行和空白行,#号开头的注释行被删除了。

将排除空白行和排除注释行的代码结合到一起,最后输出的就是所有的配置行。使用重定向命令将所有的结果输出到一个新的nginx.conf文件中,就相当于删除掉了需要排除的行。如下面图中所示。
如果你还想删除其他行,使用同样的原理,找到对应行的字符串规则,然后使用匹配的正则表达式,用grep命令的-v选项排除掉这些行即可。

我们使用cp命令重新复制一份新的nginx.conf配置文件到当前目录下。刚才说到的是,使用正则表达式删除掉匹配的行。现在我们来说一下,如何删除掉指定行号的行,如下面图中所示,这个nginx.conf配置文件中第1-3行是注释文件。

现在我想删除掉对应的行,我们来看一下sed命令是如何操作的,如下面图中所示。sed命令的应用方式是:
sed 1d nginx.conf
这个命令表示删除掉这个配置文件中的第1行,1表示行号,d表示删除。最终的输出结果中我们看到只有2行注释了。

但是sed命令默认情况下,不会修改原来的配置文件,只会将修改后的结果输出。如下面图中所示,我们打开nginx.conf配置文件,可以看到还是有3行注释。
这是为了避免用户修改源文件,导致配置出错。我们这里删除的是注释行,没有任何问题。但是当你删除的是配置行的时候,可能就会导致软件运行出错了。
因此可以将修改后的结果重定向到新的文件,然后将原来的配置文件备份以后,用新的配置文件替换。这样即使出错,也可以用备份的文件恢复,更安全。

那你肯定会问了,有没有直接修改源文件的方法?当然有,但是这个操作非常危险,建议不要在生产环境上直接操作。如下面图中所示,直接在sed命令后面加上-i选项即可。这样sed命令就会直接修改源文件。执行结果不会有任何输出,

执行完毕后我们用vim编辑器打开nginx.conf文件,如下面图中所示,可以看到第1-3行已经消失,配置文件就被改变了。因此,在修改系统配置文件或者重要的软件配置文件时,这个命令一定要非常小心地使用。尽量先备份配置文件。

修改系统重要配置时,建议先备份,后修改。
本人原创,转载请声明。
LINUX配置文件SED删除指定行正则表达式版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_337429.html