Linux三剑客命令—sed

一、概念说明

官方概念说明:

stream editor for filtering and transforming text
字符流过滤器编辑和文本字符流转换工具

[En]

Character stream filter editing and text character stream conversion tools

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

二、sed功能作用说明

  • 处理文件信息
  • 文本文件信息(小文件)
  • 日志文件信息
  • 配置文件信息
  • 处理文件方式
  • 增加信息
  • 删除信息
  • 修改信息
  • 查找信息

三、sed语法原理

3.1 命令语法格式

标准格式:

sed [选项] [sed指令] [文件信息]
sed [参数] '处理规则' [操作对象]
...

相关参数 参数说明 -e 允许多项编辑 -n 取消默认输出 -i 就地编辑 -r 支持拓展正则 -f 指定sed匹配规则脚本

举例说明:

sed -i 's#oldboy#oldgirl#g' oldboy.txt

命令参数: -i
命令指令: s
指令修饰: g

相同指令信息只能使用一次,想使用多次需要加上分号

sed四种定位模式如下:

1、数字定位法
eg:指定行号
    sed '3d' [文件信息]
    sed '2,3d' [文件信息]

2、正则定位法
eg:指定正则定位
    sed '/^g/d' [文件信息]

3、数字和正则定位法
    sed '3,/^g/d' [文件信息]

4、正则和正则定位法
    sed '/^g/,/^j/d' [文件信息]

sed的编辑模式指令汇总如下:

d :删除
p :打印
a : 在当前行后添加一行或多行
    sed '2axxx' [文件信息]
c :用新文本修改(替换)当前行
    sed '2cxxx' [文件信息]
i : 在当前行之前,插入文本(单独使用时)
    sed '2ixxx' [文件信息]
r : 在文件中读内容
    sed '2r r.txt' [文件信息]
w : 将指定行写入文件
    sed '2w w.txt' [文件信息]
y : 将字符转换成另一个字符
    sed '2y/fa/FA/' [文件信息]
s : 将字符串转换成另一个字符串(每一行只替换一次)
    sed 's/11/22/' [文件信息]
g : 全部执行
    sed 's/11/22/g' [文件信息]
i : 忽略大小写(跟 s 模式一起使用时)
& :代表前面匹配到的内容

3.2 命令执行过程

Linux三剑客命令—sed

四、sed实践操作

4.1 实践环境搭建

cat >person.txt<

4.2 命令操作实践

  1. 查询实践
  2. 单行查找
打印模式空间内容:p

取消默认输出信息:-n

最终命令执行信息:

按照行号查找: sed -n '1p' person.txt

按照信息查找: sed -n '/oldboy/p' person.txt
  • 多行查找 按照连续的多行查找:
按照行号查找: sed -n '1,3p' person.txt
按照信息查找: sed -n '/oldboy/,/yy/p' person.txt

按照不连续的多行查找:

按照行号查找: sed -n '1p;3p' person.txt
按照信息查找:
    sed -nr '/101|103|104/p' person.txt
    sed -n '/101/p;/104/p' person.txt
  1. 增加实践
  2. 按照行号增加
文件追加信息指令(行后): a---append

文件插入信息指令(行前): i---insert

最终命令执行信息:

sed '$a106\n107'  person.txt

sed '2a106\n107'  person.txt
  • 按照信息增加
sed '/oldboy/a106\n107'  person.txt
  1. 删除实践
  2. 单行删除
删除文件信息指令: d---delete
                 i---input

sed -i.bak:-i参数必须写在所有参数最后面 最终命令执行信息:

按照行号删除: sed '1d' person.txt
按照信息删除: sed  '/oldboy/d' person.txt

删除文件空行信息:

sed '/^$/d' person.txt

sed -n '/^$/!p' person.txt
  • 多行删除
按照行号删除: sed '1,3d' person.txt
按照信息删除: sed  '/oldboy/,/yy/d' person.txt
  1. 替换实践
  2. 文本替换
编辑文件信息参数: i
替换文件信息指令: s c
按行进行信息替换: g    (否则只替换每行匹配的第一个信息)

最终命令执行信息:

替换文件信息: sed -i.bak 's#oldboy#oldgirl#g' person.txt
  • 反向引用
扩展正则识别参数: -r
调用正则匹配信息: &

最终命令执行信息:

替换文件信息:
sed -r 's#(.*)##g' person.txt

sed -r 's#.*##g' person.txt

echo 123456|sed -r 's#[1-6]{1}##g'
echo 123456|sed -r 's#.##g'
  • 相关案例
1、将nginx.conf中的注释行全部去掉
    [root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf

2、将nginx.conf中每一行之前增加注释
    [root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf

3、要求一键修改本机的ip,
    192.168.15.100 ---> 192.168.15.101
    172.16.1.100   ---> 172.16.1.101
    sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]

4、将/etc/passwd中的root修改成ROOT
    sed -i 's#root#ROOT#g' /etc/passwd
  1. 拓展实践
修饰指定信息取反: sed -n '/^$/!p' person.txt

取出文件行号信息: sed '=' person.txt

执行多个相同指令: sed -n '1p;3p;5p' person.txt

Original: https://www.cnblogs.com/JZjuechen/p/15717100.html
Author: JZEason
Title: Linux三剑客命令—sed

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/524266/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • supervisord 进程管理利器

    Supervisor概述 ​ supervisor是一个 Client/Server模式的系统,允许用户在类unix操作系统上监视和控制多个进程,或者可以说是多个程序。superv…

    Linux 2023年5月27日
    089
  • eMule电骡使用教程

    eMule(电骡)是一个不错的下载器。实际上它是一个文件分享平台,但你可以把它当做一个自带资源搜索的bt下载器,如下图。虽然用户不多(我下午看在线有10万),下载速度一般,比较好的…

    Linux 2023年6月6日
    0136
  • python语法01

    在某.py文件中调用其他.py文件中的内容。全局变量的使用。线程的使用。if name == ‘ main‘: 的作用新建两个python脚本文件f1Fil…

    Linux 2023年6月14日
    075
  • 3.21 Linux PATH环境变量及作用(初学者必读)

    在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径。例如: [root@localhost ~]# which rm /bin/rm …

    Linux 2023年6月7日
    077
  • 在Linux命令行内的大小写转换

    在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令。接下来让我们看看都有哪些完成大小写转换的命令。 t…

    Linux 2023年6月14日
    0109
  • 进程与fork

    进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程…

    Linux 2023年6月7日
    090
  • 双系统设置默认启动系统

    在原有windows系统下,我们装完Ubuntu系统后,会出现Ubuntu的grub引导界面(倒计时后自动进入Ubuntu),如下图所示。 假设我们需要将倒计时后默认启动的系统改为…

    Linux 2023年5月27日
    0100
  • LeetCode-349. 两个数组的交集

    题目来源 题目详情 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入: n…

    Linux 2023年6月7日
    063
  • 【转】谈谈 JVM 内部锁升级过程

    一、加锁发生了什么 //System.out.println&#x90FD;&#x52A0;&#x4E86;&#x9501; public void…

    Linux 2023年6月16日
    0112
  • 小公司比较吃亏的两道微服务面试题

    其实选择工作的时候,很多技术牛人都会选择一些小而美的公司,技术全面,能够以一个更全面的视角看整个公司的运作,人和人之间的相处也很简单。但是,有两道微服务的面试题,小公司的朋友们会比…

    Linux 2023年6月14日
    0100
  • redis持久化存储

    redis持久化存储 redis多被用于缓存和消息中间件,当被用作缓存时,数据的读写都是在内存中进行的,而内存一旦在主机断电或者主机重启时里面的数据将被清空,为保证数据不被丢失,r…

    Linux 2023年6月7日
    097
  • linux中实时监控目录中生成的文件,并钉钉告警

    inotify是一个API 需要通过开发应用程序进行调用,对于大多数用户来讲这有着许多不便,inotify-tools的出现弥补了这一不足。 inotify-tools是一套组件,…

    Linux 2023年6月6日
    0102
  • redis限流的3种实现方式

    Redis限流的实现方式有3种,分别是:1、基于Redis的setnx的操作,给指定的key设置了过期实践;2、基于Redis的数据结构zset,将请求打造成一个zset数组;3、…

    Linux 2023年5月28日
    081
  • ThinkPHP5权限管理

    自己写的权限管理,大致思路:用户登陆成功之后,查出该用户的权限列表,并把权限列表存到session中,进入系统后,再判断该模块是否在session中,如果存在就说明有该权限,就显示…

    Linux 2023年6月7日
    085
  • cube.js 即将使用cube store 替换redis

    随着发着cube store 的能力已经很强大了,官方目前计划使用cube store 替换redis cube.js 内存查询参考 官方对于redis 的说明 官方觉得redis…

    Linux 2023年5月28日
    0117
  • Tensorflow

    1.什么是Tensorflow? Tensor(张量)意味着 N 维数组,Flow(流)意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。 它支持CNN…

    Linux 2023年6月6日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球