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"


目录
相关文章
|
30天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
63 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
16天前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
127 14
|
1月前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
65 14
Linux 10 个“who”命令示例
|
15天前
|
存储 NoSQL Linux
linux积累-core文件是干啥的
核心文件是Linux系统在程序崩溃时生成的重要调试文件,通过分析核心文件,开发者可以找到程序崩溃的原因并进行调试和修复。本文详细介绍了核心文件的生成、配置、查看和分析方法
45 6
|
27天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
124 20
|
17天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
46 8
|
17天前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
97 6
|
27天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
58 7
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
45 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解