当前位置: 首页 > article >正文

Linux之sed命令详解

文章目录

  • 🍊自我介绍
  • 🍊sed概述
  • 🍊sed语法讲解
    • 格式:
    • options 命令选项
    • {commmand}[flags]
  • 🍊场景训练


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的相关内容。


🍊sed概述

简介:
  我们之前的学习中,Vim 采用的是交互式文本编辑模式,你可以用键盘命令来交互性地插入、删除或替换数据中的文本。但本节要讲的 sed 命令不同,它采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。
使用场景

· 超大文件处理;
· 对文件进行批量增加,替换等。
· 有规律的文本,例如 以分号,空格等分隔的日志文件等;

说明:
  sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:
· 每次仅读取一行内容;
· 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数。据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
·将执行结果输出。
  当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。

在这里插入图片描述

🍊sed语法讲解

格式:

sed [options] '{command}{flags}' [filename]

注意:[]中的数据必须存在,{}内容可省略

options 命令选项

-e 脚本命令 该选项会将其后面的脚本命令添加到已有的命令中。 
-f 脚本文件 该选项会将其文件中的脚本命令添加到已有的命令中。
-n 只显示匹配的行
-i 直接对原文件进行操作,会修改原文件内容。sed命令默认不修改文件

{commmand}[flags]

sed内部常用命令

i:insert,在制定或匹配到的行前面添加新行内容为 string
a:append,在指定或匹配到的行后面追加新行,内容为string
d:delete,删除符合地址定界条件的的行
p: print,默认 sed 对模式空间内的处理完毕后,将输出的结果输出在标准输出p添加 p命令,相当于输出了原文,又一次输出了模式匹配处理后的内容。
s:查找并替换,默认只替换每行中第一次被模式匹配到的字符串,如果修饰符为 g,则为全部替换。
n:  1~512之间的数字 表示指定要替换的字符串出现第几次时才进行替换。
	例如,一行中有 3个 A,但用户只想替换第二个 A,这是就用到这个标记;
g:  对数据中所有匹配到的内容进行替换,如果没有8,则只会在第一次匹
	配成功时做替换操作8例如,一行数据中有 3个 A,则只会替换第一个 A;
p:  会打印与替换命令中指定的模式匹配的行。此标记通常与-n选项一起使
	用。

🍊场景训练

场景1:显示/etc/passwd第三行的信息

之前学习的命令展示:head -3 /etc/passwd | tail -1

sed 命令:
sed -n '3p' /etc/passwd  //3是行号,p是输出

场景2:在/etc/passwd中第一行前添加一行内容为“Good Good Study”

sed -e '1iGood Good Study' /etc/passwd 
//这里的1代表第一行,i代表插入的意思。表示在第1行前插入新的字符串。

场景3:把/etc/passwd中所有名字为root的字符串改为class

sed 's/旧字符串/新字符串/g' 文件名
功能:替换所有的字符串

sed 's/旧字符串、新字符串、数字' 文件名
功能:替换每行中第(数字)次出现该字符串的数据
sed -e 's/root/class/g' /etc/passwd

场景4:删除/etc/passwd中内容并列出行号,同时将2~5行删除

cat -n /etc/passwd | sed '2,5d'

场景5:把/etc/passwd文件中root用户的信息以带行号的形式重定向到log.txt 文件中;要求把log.txt文件中的root替换为linux,并且log.txt中保存替换后的文件

cat -n /etc/passwd > log.txt
sed -i 's/root/linux/g' log.txt

http://www.kler.cn/a/389586.html

相关文章:

  • JQuery封装的ajax
  • request爬虫库的小坑
  • Flink_DataStreamAPI_输出算子Sink
  • 2024.11.12_大数据的诞生以及解决的问题
  • AI 扩展开发者思维方式:以 SQL 查询优化为例
  • 词嵌入方法(Word Embedding)
  • Java将Boolean转为Json对象的方法
  • Web前端演示:遥感建筑物图像分割
  • 前端CSS3 渐变详解
  • 15分钟学 Go 第 46 天 : 监控与日志
  • 15分钟学 Go 第 41 天:中间件的使用
  • git status 命令卡顿的排查
  • Qt信号和槽-->day04
  • Rust学习(二)——rust基础语法Ⅰ:
  • 【数据分享】2024年我国省市县三级的生活服务设施数量(46类设施/Excel/Shp格式)
  • 大数据实训室中,高职大数据可视化开发技术实训课程改革研究
  • 【机器学习】强化学习(1)——强化学习原理浅析(区分强化学习、监督学习和启发式算法)
  • 蓝桥杯-洛谷刷题-day2(C++)
  • Linux系统程序设计--2. 文件I/O
  • 大模型系列——LLAMA-O1 复刻代码解读
  • Spring Boot 的生命周期
  • 【进阶】Stable Diffusion 插件 Controlnet 安装使用教程(图像精准控制)
  • 探密 C++ STL — 深入理解 Stack 和 Queue 的实现与应用
  • 前端上传大文件,后端报错Content-Type ‘application/octet-stream‘ is not supported【解决】
  • Spring Boot2.x教程:(十二)日志分割后续
  • #渗透测试#SRC漏洞挖掘#Python自动化脚本的编写04之通过面向对象编程学生管理信息系统01