shell三剑客之sed
背景
sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查。为什么称之为“流”编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处理,比如:配置文件、设备文件、日志等等。sed就类似于工厂流水线作业的车间一样,文件中的每行内容都是生产元件,经过sed车间流水线处理,最终会变成成品。
sed语法格式
同grep一样,sed提供两种方式:
- stdout | sed [option] “pattern command”
- sed [option] “pattern command” file
第一种是从文本中直接使用pattern匹配搜索
第二种是从标准输出中处理
| 语法格式 | 解释 |
|---|---|
| option | 选项 |
| pattern | 匹配到对应的内容(找谁?) |
| command | 执行操作/命令,增删改查等(做啥?) |
选项
| 选项 | 含义 |
|---|---|
| -n | 只打印模式匹配的行 |
| -e | 指定对应的模式命令,如果只要一个不需要指定 |
| -r | 在模式中使用扩展正则表达式 |
| -i | 直接修改文件内容 |
pattern匹配模式
| 匹配模式 | 含义 |
|---|---|
| 10 command | 匹配到第10行 |
| 10,20 command | 匹配从第10行开始,到第20行结束 |
| /pattern1/ command | 匹配到pattern1的行 |
| /pattern1/,/pattern2/ command | 匹配到pattern1的行开始,到匹配到pattern2的行结束 |
| 10,/pattern1/ command | 匹配到从d第10行开始,到匹配到pattern1的行结束 |
| /patttern1/,10 command | 匹配到pattern1的行开始,到第10行匹配结束 |
sed命令-增加&删除
| 类别 | 编辑命令 | 含义 |
|---|---|---|
| 增加 | a | 行后追加(append) |
| 增加 | i | 行前追加(insert) |
| 删除 | d | 删除 |
练习:
单行插入
sed '5a lemonban' test.txt
多行插入
# \n表示换行符
sed '5i hello\nlemonban' test.txt
删除内容
#删除文件所有内容(不指定匹配模式,默认会匹配到所有行)
sed 'd' test.txt
#删除文件第二行内容
sed '2d' test.txt
sed命令-修改
| 类别 | 编辑命令 | 含义 |
|---|---|---|
| 修改 | s#old#new# | 将行内第一个old替换为new |
| 修改 | s#old#new#g | 将行内全部的old替换为new |
- “#”作为定界符,“/”也可以作为定界符,当替换内容有包含定界符时,需要进行转义
- 如果要修改文件内容,需要加“-i”参数
练习:
修改文件内容,不对源文件起效
#将文件中的lemonban替换成lemon
sed 's#lemonban#lemon#g' person.txt
修改源文件内容
#将文件中的lemonban替换成lemon
sed -i 's#lemonban#lemon#g' person.txt
修改文件指定行对应的内容
#将文件中第二行的lemonban替换成lemon
sed -i '2s#lemonban#lemon#g' person.txt
sed分组替换功能
正则表达式中的分组功能sed也是可以支持的,用()记住正则表达式的一部分,其中,\1为第一个小括号里面的内容,如果还有其他的下括号,那么\2即可第二个,以此类推...,最多记住9个。
实例:
I am yy teacher.这串文本想要保留yy,删除剩余的部分
echo "I am yy teacher." | sed -r 's#I am ([a-z]+) teacher.#\1#g'
给配置文件中某一项配置加注释
sed -r 's#(^test)#\#\1#' file
sed命令-查询
查询相比较是最简单的,sed中的查询相比cat、more命令可以更加精细,例如:
查询文件第二行内容(p即表示查询)
sed -n '2p' test.txt
查询文件1-10行
sed -n '1,10p' test.txt
注意:p查询命令需要和-n参数结合一起使用,如果不使用-n 会输出原来行内容及匹配行的内容,-n表示取消原来行输出
综合实例
用sed取出Linux网卡eth0的IP地址
ifconfig eth0 | sed -rn '2s#^.*addr:(.*) Bcast:.*$#\1#gp'
将/etc/passwd文件中非单词字符替换成空格
sed -r 's#[^a-zA-Z]+# #g' /etc/passwd
问题?使用单引号or双引号区别?
- 双引号
把双引号的内容输出出来;如果内容中有命令,变量等,会先把命令,变量解析出结果,然后再输出最终内容来。双引号内命令或变量的写法为命令或变量或$(命令或变量)。 - 单引号
所见即所得,将单引号内的内容原样输出,阻止所有字符的转义。
shell三剑客之sed的更多相关文章
- shell 三剑客之 sed
sed 在shell 编程里也很常用,功能强大! 同grep一样,sed提供两种方式: 方式一:stdout | sed [option] "pattern command" 从文 ...
- Shell三剑客之sed命令
Sed简介 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具,常用功能有增删改查. Sed命令执行流程 Sed语法格式 Sed [option] ‘[匹配][处 ...
- shell 三剑客之 sed pattern 详解
sed 基础介绍 语法格式 sed 处理过程 sed 选项 cat sed.txt '-p' 打印输出 ,默认输出两次,流输出一次,源文件输出一次 sed 'p' sed.txt -n 只显示处理的 ...
- shell 三剑客之 sed 命令详解
sed 编辑命令 sed 编辑命令对照表 把 /etc/passwd 文件赋值到当前路径下,进行操作 cp /etc/passwd ./ cat -n passwd sed 删除操作 删除 passw ...
- shell编程系列13--文本处理三剑客之sed利用sed追加文件内容
shell编程系列13--文本处理三剑客之sed利用sed追加文件内容 追加用法总结: .a 在匹配行后面追加 .i 在匹配行前面追加 .r 将文件内容追加到匹配行后面 .w 将匹配行写入指定文件 追 ...
- shell编程系列12--文本处理三剑客之sed利用sed修改文件内容
shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...
- shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容
shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...
- shell编程系列10--文本处理三剑客之sed利用sed查询特定内容
shell编程系列10--文本处理三剑客之sed利用sed查询特定内容 利用sed查找文件内容: pattern种类: .8p .,10p .,+5p ./regexp/p .,/regexp/p . ...
- shell编程系列9--文本处理三剑客之sed概述及常见用法总结
shell编程系列9--文本处理三剑客之sed概述及常见用法总结 sed的工作模式:对文本的行数据一行行处理,如下图 sed(stream editor),是流编辑器,依据特定的匹配模式,对文本逐行匹 ...
随机推荐
- Python学习笔记之json.dump和json.load
10-11 喜欢的数字:编写一个程序,提示用户输入他喜欢的数字,并使用json.dump()将这个数字存储到文件中.再编写一个程序,从文件中读取这个值,并打印消息“I know your favori ...
- 二、NodeJS入门——准备工作(2)——MongoDB安装以及客户端Robomongo安装和使用
目录 1.介绍 2.下载地址 3.MongoDB安装过程 4.MongoDB的使用 5.MongoDB添加管理员账户 6.RoboMongo安装过程 ...
- Gin-Go学习笔记四:Gin-Web框架 文件的上传下载
文件的上传和下载 1->文件的上传 文件的上传,采用的是uploadify.js这个插件. 本事例实现的是上传图片文件,其他的文件上传也一样. 2->文件的下载 文件的下载有两个实现的方式 ...
- Spark GraphX图计算简单案例【代码实现,源码分析】
一.简介 参考:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package big.data.analyse.graphx import o ...
- 一个从tensorflow_1.14.0-gpu-py3-jupyter镜像生成公司实际需求的Dockerfile
外部的标准镜像,肯定满足不了公司的实际要求咯~~ 所以,根据同事的需求,重新制作了这个包. 其中可用库为tensorflow,numpy, pandas,scikit-learn,jieba,gens ...
- ActiveMQ消息可靠性-事物
事物偏生产者,签收偏消费者 设置为true,需要手动提交 设置为false,自动提交 使用手动提交的好处就是可以回滚,当整个事物提交时,里面的某条失败了,可以事物回滚,于是保证了数据的一致性 ...
- Scikit-learn Preprocessing 预处理
本文主要是对照scikit-learn的preprocessing章节结合代码简单的回顾下预处理技术的几种方法,主要包括标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 数学基础 均 ...
- TensorFlow Lite for Android示例
一.TensorFlow Lite TensorFlow Lite 是用于移动设备和嵌入式设备的轻量级解决方案.TensorFlow Lite 支持 Android.iOS 甚至树莓派等多种平台. ...
- Windbg Scratch Pad(便笺簿)窗口的使用
“便笺簿”窗口是一个剪贴板,您可以在其中键入和保存文本. 打开便笺簿 通过菜单View--->Scratch Pad 通过快捷键Alt+8 通过工具栏 使用便笺簿 用上面的方式打开的窗口如下: ...
- selenium篇之滑动验证码
一.介绍 现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码.它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以 ...