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"


目录
相关文章
|
7天前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
50 23
Linux系统之whereis命令的基本使用
|
3天前
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
50 34
|
20天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
33 11
|
2月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
89 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
273 14
|
2月前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
203 20
|
2月前
|
存储 NoSQL Linux
linux积累-core文件是干啥的
核心文件是Linux系统在程序崩溃时生成的重要调试文件,通过分析核心文件,开发者可以找到程序崩溃的原因并进行调试和修复。本文详细介绍了核心文件的生成、配置、查看和分析方法
155 6
|
2月前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
140 8
|
2月前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
400 6
|
2月前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
128 7