Linux|sed命令花式批量修改文件

简介: Linux|sed命令花式批量修改文件

前言:

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"


目录
相关文章
|
28天前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
104 16
|
20天前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
|
3月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
669 13
|
2月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
399 0
|
2月前
|
安全 Linux Shell
Linux系统中sudo命令的高效运用技巧。
用户可以通过sudo -l来列出自己目前可执行的命令列表,这有助于用户了解自己的权限范围。
123 0
|
2月前
|
监控 Linux Shell
linux命令
常用 Linux 命令汇总
|
3月前
|
Linux C++
每天一个linux命令(8):cp 命令
cp 命令是 Linux 中用于复制文件或目录的命令。它的名字来源于英文单词 copy。这个命令非常常用,特别是在需要备份文件或创建文件副本时。
124 0
|
Unix Linux 测试技术
|
Linux Perl
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
在Linux中,如何使用请用 cut 或者 awk,sed命令取出 linux 中 eth0 的 IP 地址?
|
Linux Perl
Linux之sed命令
Linux之sed命令