前言:
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"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)