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"


目录
相关文章
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1018 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
641 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1594 58
|
9月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1490 2
|
10月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
802 16
|
10月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
905 0
Linux内存问题排查命令详解
|
11月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
2090 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命令