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)

大家都在看

  • keepalived+nginx高可用集群配置(centos)

    1、简介 Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供l oa…

    Linux 2023年6月6日
    0105
  • Linux进程调度器

    完全公平调度器 用黑体标出的是文章的主线,未用黑体标出的内容是对黑体内容的解释或注解。 每次调用调度器时,它会挑选具有最高等待时间的进程,把CPU提供给该进程。如果经常发生这种情况…

    Linux 2023年6月13日
    089
  • markdown插入代码块导致列表缩进异常的解决方法

    前言 一、问题描述 总结 前言 最近正在用markdown写博客,发现插入代码块后,代码块和代码块后的内容会产生缩进异常,翻了翻网页,发现又是经典的一模一样的文章一大把,尝试了之后…

    Linux 2023年6月7日
    0196
  • MySQL日志管理之二进制日志

    二进制日志采用二进制格式(01)来存储日志信息(导致数据发生变化的SQL语句),二进制日志记录整个数据库的修改过程。 MySQL的二进制日志主要就是起一个备份的功能。二进制日志≈备…

    Linux 2023年6月7日
    0103
  • 上篇:34个JavaScript栗子,从易到难。

    alert("hello world") document.write("hello world") console.log("好…

    Linux 2023年6月7日
    089
  • Redis的RDB持久化

    posted @2022-02-24 16:11 天宇轩-王 阅读(34 ) 评论() 编辑 Original: https://www.cnblogs.com/dalianpai…

    Linux 2023年5月28日
    095
  • 【转载】人才成长攻略

    本文转载自知乎《前些天在知乎回复了一个帖子:怎么劝大四室友不要考计算机研?- 曹政的回答》,原作者曹政 评论里有一堆阴阳怪气的说法,什么没天赋怎么办,程序员也不是终身可靠的职业云云…

    Linux 2023年6月13日
    091
  • 缓冲区溢出二:从缓冲区溢出到获取反弹shell实例

    一、说明 之前写过一篇”缓冲区溢出一:函数调用过程中的堆栈变化及缓冲区溢出利用原理“,道理讲得还可以,但现在看还是需要一个示例来讲解从攻击角度如何实现返回地…

    Linux 2023年5月28日
    0113
  • Spring5 学习笔记

    学习地址: B站-动力节点 个人代码: GitHub Spring 概述 1.1 Spring 简介 Spring Framework 是一个使用Java开发的、轻量级的、开源框架…

    Linux 2023年6月14日
    095
  • 正则表达

    常用表达式 单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字、字母、下划线、中文\W :…

    Linux 2023年6月13日
    090
  • Unity Profiler的使用

    选中Development Build、Autoconnect Profiler和Script Debugging三个选项,如下图所示。 点击Build And Run按钮,将会编…

    Linux 2023年6月7日
    095
  • Redis主从复制搭建及原理

    1 简介 1.1 Redis在单机、单节点、单实例下存在的问题 单机故障 内存容量有限 访问压力 Redis主从架构主要解决的问题:单机故障和访问压力,通过主从架构可以将访问流量分…

    Linux 2023年6月13日
    0101
  • 2021年1月-第02阶段-前端基础-HTML+CSS进阶-VS Code 软件

    软件安装 VSCode软件 能够安装 VS Code 能够熟练使用 VS Code 软件 能够安装 VS Code 最常用的插件 1. VS Code简介 1.1 VS Code …

    Linux 2023年6月8日
    089
  • cpu idle 状态查看【原创】

    查看cpu idle的类型 cat /sys/devices/system/cpu/cpu0/cpuidle/state0/desc ARM WFI 查看cpu idle进入的次数…

    Linux 2023年6月8日
    0110
  • JS 模块化- 04 CMD 规范与 Sea JS

    1 CMD 规范介绍 CMD: Common Module Definition, 通用模块定义。与 AMD 规范类似,也是用于浏览器端,异步加载模块,一个文件就是一个模块,当模块…

    Linux 2023年6月6日
    0114
  • Centos7 找回root密码

    在开机界面,按”e”进入编辑界面 按”e”进图下图界面后,找到开头为”linux16″行,在行后面加入 &#…

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