Linux|常用命令|sed

SED的适用场景
SED是Stream EDitor的简称,也就是流编辑器,适用在不打开文件的情况下,增删改查文件内容
SED command in UNIX stands for stream editor and it can perform lots of functions on file like searching, substitution or find and replace, insertion or deletion.By using SED you can edit files even without opening them, which is much quicker way to find and replace something in file, than first opening that file in VI Editor and then changing it.
语法格式
#第一种语法格式
STDOUT | sed [option] <command>
#第二种语法格式
sed [option] <command> <file>
sed [option] <command> <<EOF
EOF
command使用双引号包裹,变量生效
command使用单引号包裹,单引号包裹变量后生效
command建议使用单引号包裹,避免非变量生效,如sed '$d'和sed "$d"
== <[area] action>
Option
参数说明
-n #常和p搭配
-e #-e <command> -e <command>
-f #读取文件中的<command>
-i #更新文件(默认是输出到STDOUT)
-r #使用扩展正则表达式,建议使用,语法便利
命令的执行顺序对结果有影响
sed -e <command> -e <commmand> $file
sed 'command;command' $file
sed <command> $file | sed <command> $file
Action作用的行范围
| 范围 | 示例 |
|---|---|
| 缺省默认所有行 | |
| n1 command | 第n行 |
| $ command | 尾行 |
| n1,n2 command | 第n1~n2行 |
| n1,+n | 第n1~n1+n行 |
| /ptn1/ command | 所有匹配到的行 |
| /ptn1/,/ptn2/ command | ptn=ptn1,匹配则区间开始,ptn=ptn2,匹配则区间结束,闭区间,反复执行 |
| /ptn1/,+n command | 匹配ptn1即随后n行,反复执行 |
| n1,/ptn2/ command | 从n1行到匹配ptn2的闭区间,以及后续匹配ptn2的所有行 |
| /ptn1/,n2 command | 从匹配ptn1到n2行的闭区间,以及后续匹配ptn1的所有行 |
Action类型:行的增删改查
p print
i insert
a append
r read
w write
c
s
y
d
增
#目标行后新增行
sed -r '[area] a <line content>' $file
#目标行前新增行
sed -r '[area] i <line content>' $file
#目标行后新增多行,方式一,单引号包裹command
sed -r '[area] a <line content>\
<line content>\
<line content>' $file
#目标行后新增多行,方式二,双引号包裹command
sed -r "[area] a <line content>\n<line content>\n<line content>" $file
#复制目标行
sed -r "[area] p" $file
删
sed -r '[area] d'
改
#定界符,定界符出现在样式内部时,需要进行转义
echo -e … | sed -r '[area] s/origin/new/' $file
echo -e … | sed -r '[area] s|origin|new|' $file
echo -e … | sed -r '[area] s:origin:new:' $file
#每行只替换第一个匹配的字符串
echo -e … | sed -r '[area] s/origin/new/' $file
echo -e … | sed -r '[area] s/origin/new/1' $file
#每行替换所有匹配的字符串
echo -e … | sed -r '[area] s/origin/new/g' $file
#每行替换第n个及后续匹配的字符串
echo -e … | sed -r '[area] s/origin/new/ng' $file
#匹配忽略大小写
echo -e … | sed -r '[area] s/origin/new/ngi' $file
#匹配和反向引用,&代表匹配的部分
sed -r '[area] s/pattern/prefix&/g' $file #目标字符串前添加字符串
sed -r '[area] s/pattern/&postfix/g' $file #目标字符串后添加字符串
sed -r '[area] s/^/prefix&/g' $file #在所有行首添加
sed -r '[area] s/$/&postfix/g' $file #在所有行末添加
#分组(匹配的一部分)和反向引用
sed -rn '[area] s/.*(ptn1).*(ptn2).*/\1\2/ p' $file
#分组(匹配的一部分)和反向引用,提取字符串
sed -rn '[area] s/.*(ptn1).*/\1/ p' $file
#将多行替换成一行
sed '[area] c new line' $file
查
sed -rn '[area] p' $file
正则Regular Expression
推荐使用扩展语法sed -r ...,统一的规范。
| 扩展 | 默认 | 效果 |
|---|---|---|
? |
\? |
|
* |
* |
|
+ |
\+ |
|
{n1} |
\{n1\} |
|
{n1,n2} |
\{n1,n2\} |
|
{n1,} |
\{n1,\} |
|
^ |
^ |
|
$ |
$ |
|
[] |
[] |
|
[^] |
[^] |
|
[a-zA-Z0-9] |
[a-zA-Z0-9] |
|
\w |
\w |
字母数字下划线 |
\W |
\W |
字母数字下划线 |
\s |
\s |
|
\S |
\S |
|
() |
\(\) |
Linux|常用命令|sed的更多相关文章
- linux 常用命令大全
linux 常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统 ...
- Linux常用命令速查备忘
Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...
- Linux常用命令大全(非常全!!!)
Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...
- 【原创】Linux基础之linux常用命令之文本替换
linux常用命令之文本替换 1 vi vi test_file :%s/h/h1/g 注释:全文替换,将h替换为h1 :1,4s/h/h1/g 注释:将第1行到第4行的h替换为h1 :%s/\n/, ...
- 转载Alpine Linux常用命令
Alpine Linux常用命令 目录 一:Alpine Linux开启SSH远程登陆 1.简介: 2.配置 3.配置命令 4.重启服务 二:Alpine Linux源管理 1.简介 2.国内源简介: ...
- 【转载】Linux常用命令
Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...
- Linux常用命令-文本查看篇
前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...
- Linux常用命令全称
Linux常用命令全称 pwd:print work directory 打印当前目录 显示出当前工作目录的绝对路径 ps: process status(进程状态,任务管理器) 常用参数: ...
- Linux常用命令大全(转)
(转)Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因, ...
- 18-10-09 Linux常用命令大全(非常全!!!)
Linux常用命令大全(非常全!!!) Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制, ...
随机推荐
- mysql的innodb缓存使用率统计
show 方式去查看: show status like '%innodb_buffer_pool_pages%'; 计算方式: (total-free)/total * %100: sql方式查看: ...
- docker内存限制
默认docker容器可以使用宿主机所有的内存和CPU,我们可以通过 docker run 来限制内存和CPU的使用. 有的系统内核不支持 Linux capabilities. 可以通过 docker ...
- Idea内存设置idea.vmoptions无效的解决办法
原因:貌似是因为maven的问题 解决办法 结果
- Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed.
说明 今天发现这个错误,然后整体检查了一下代码,没有发现任何错误,最后没法只有来一步一步排查. 解决 确定pom文件是否有问题 如上图,有红色波浪线,代表错误,请检查并解决,还有版本是否冲突,最好把不 ...
- 什么是UIImageView
UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITableView等等 UI ...
- KVC替换系统的tabbar为自定义tabbar---秀清
CustomTabbar *tabbar = [[CustomTabbar alloc]init]; //KVC,更换系统的tabbar为自定义tabbar tabbar.tabbarDelegate ...
- MySQL 索引、事务与存储引擎
MySQL 索引.事务与存储引擎 1.索引 2.事务 3.存储引擎 1.索引: 索引的概念 : 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 ...
- 一键部署lnmp
一键部署lnmp 提前将nginx .mysql .php 所需安装包都放在/opt目录下 脚本启动结束时,重启一下nginx 服务,就能在火狐浏览器更新出php测试页 脚本如下:(脚本里的软件 ...
- LNMP平台的redis对接安装
LNMP平台的redis对接安装 目录 LNMP平台的redis对接安装 一.安装LNMP的各个组件 二.安装redis服务 三.安装redis扩展 四.修改php配置文件 五.测试连接 一.安装LN ...
- JVM基础学习(一):JVM内存模型
在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...