前言:
sed命令,流式修改文本文件的强大工具,比如,最常用的关闭selinux时通常采用sed命令快速修改。
OK,其实sed命令虽然强大,但它修改文件的方式是非常多的,就像关闭selinux,可能都会有N种方式。
本文将就如何优雅的使用sed命令以及sed命令批量修改文件做一个详细的总结。
一,
关闭selinux的方法
首先,我们先看一下selinux的配置文件,观察它的结构:
[root@EULEER BBBBBBBBB]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
修改思路:
OK,我们的目的是修改第七行,那么,修改思路应该是部分替换,替换disabled为enforcing或者permissive,另一种思路是整体删除SELINUX=disabled 这一行,然后在原删除位置增加SELINUX=enforcing或者SELINUX=permissive这一行,当然,这个SELINUX=disabled是可以放置在任意一行,因此,在原位置或者在末尾或者开始增加这一行都是可以的。
那么,如何实现呢?
一。
整体替换
sed -i 's/SELINUX=disabled/SELINUX=permissive/g' /etc/selinux/config
参数解释:
g表示相对文本文档,全局替换
s表示替换,第一个/ 后面接要替换的整行第二个/接新的内容
i表示立刻修改
也可以这样替换,效果是一样的:
sed -i 's/^SELINUX=disable/SELINUX=permissive/g' /etc/selinux/config
二,
部分替换
sed -i 's/=disable/=permissive/g' /etc/selinux/config
三,
替换的内容前增加两个空格
sed -i 's/=disabled/= permissive/g' /etc/selinux/config
替换后的文件内容如下:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX= permissive # SELINUXTYPE= can take one of three two values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
四,
指定行插入一个空行
再次执行此命令将会在增加一个空行
sed -i '/^SELINUX=/a \n' /etc/selinux/config
五,指定行插入两个空行
再次执行此命令将会在增加两个空行
sed -i '/^SELINUX=/a \\n' /etc/selinux/config
六,
指定行后增加一个 t带有table的空行
sed -i '/^SELINUX=/a \\t' /etc/selinux/config
七,
指定行后增加指定内容 /fuck
sed -i '/^SELINUX=/a \ /fuck' /etc/selinux/config
八,
利用变量删除指定行
例如这样的一个文件,文件内有一些特定字段不想要,需要,比如,带有仪表盘 这一行删除:
[root@EULEER ~]# cat 111111.txt [ { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Discover'", "cn": "title: '发现'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Visualize'", "cn": "title: '可视化'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Dashboard'", "cn": "title: '仪表盘'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Dev Tools'", "cn": "title: '开发工具'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Management'", "cn": "title: '系统管理'" }, { "path": "src/core_plugins/timelion/index.js", "en": "title: 'Timelion'", "cn": "title: '时间线'" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Selected Fields", "cn": "已选字段" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Available Fields", "cn": "可选字段" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Aggregatable\\n", "cn": "可聚合\\n" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Searchable\\n", "cn": "可查询\\n"
那么,删除方法为把包含的关键子定义为变量,然后sed 命令引用变量,删除即可:
[root@EULEER ~]# a='仪表盘' [root@EULEER ~]# sed -i "/${a}/"d 111111.txt
确认删除掉了:
[root@EULEER ~]# cat 111111.txt [ { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Discover'", "cn": "title: '发现'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Visualize'", "cn": "title: '可视化'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Dashboard'", }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Dev Tools'", "cn": "title: '开发工具'" }, { "path": "src/core_plugins/kibana/index.js", "en": "title: 'Management'", "cn": "title: '系统管理'" }, { "path": "src/core_plugins/timelion/index.js", "en": "title: 'Timelion'", "cn": "title: '时间线'" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Selected Fields", "cn": "已选字段" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Available Fields", "cn": "可选字段" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Aggregatable\\n", "cn": "可聚合\\n" }, { "path": "/optimize/bundles/kibana.bundle.js", "en": "Searchable\\n", "cn": "可查询\\n"