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的更多相关文章

  1. linux 常用命令大全

    linux 常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统 ...

  2. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  3. Linux常用命令大全(非常全!!!)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  4. 【原创】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/, ...

  5. 转载Alpine Linux常用命令

    Alpine Linux常用命令 目录 一:Alpine Linux开启SSH远程登陆 1.简介: 2.配置 3.配置命令 4.重启服务 二:Alpine Linux源管理 1.简介 2.国内源简介: ...

  6. 【转载】Linux常用命令

    Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...

  7. Linux常用命令-文本查看篇

    前言 Linux常用命令中,除了cat还有很多其他用于文本查看的命令.本文将简单介绍一下这些文本查看的命令. 全文本显示--cat cat可能是常用的一个文本查看命令了,使用方法也很简单: cat f ...

  8. Linux常用命令全称

    Linux常用命令全称 pwd:print work directory   打印当前目录 显示出当前工作目录的绝对路径 ps: process status(进程状态,任务管理器)    常用参数: ...

  9. Linux常用命令大全(转)

    (转)Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因, ...

  10. 18-10-09 Linux常用命令大全(非常全!!!)

     Linux常用命令大全(非常全!!!)   Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制, ...

随机推荐

  1. .NET 5.0 Docker 镜像 错误修复方法

    在给eshopondapr 打镜像的时候碰到了3个错误 1.restore: Received an unexpected EOF or 0 bytes from the transport stre ...

  2. 羽夏看Win系统内核——同步篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  3. 布客&#183;ApacheCN 编程/后端/大数据/人工智能学习资源 2020.7

    公告 我们的群共享文件有备份到 IPFS 的计划,具体时间待定. 我们的机器学习群(915394271)正式改名为财务提升群,望悉知. 请关注我们的公众号"ApacheCN",回复 ...

  4. 在IDE中添加widfly依赖

    动机:在IDE中添加widfly依赖 原由:widfly实现了servlet接口,有我们对外交互时所需求的jar包 步骤: 第一步: 找到module依赖的地方 第二步:点击左侧的添加按钮,点击Lib ...

  5. 浅谈VPC (转)

    来源于知乎:https://zhuanlan.zhihu.com/p/33658624 VPC全称是Virtual Private Cloud,翻译成中文是虚拟私有云.但是在有些场合也被翻译成私有网络 ...

  6. 学习JSP篇:jsp简单介绍

    这几天开始学习JSP和Servlet,写些博客,记录自己的学习过程,算是自己从业开始的一个见证. 一.什么是JSP JSP的全称是Java Service Page,一种动态的网页开发技术,区别于静态 ...

  7. 注解的使用、拦截器使用、AOP切面使用

    Java 自定义注解及使用场景 转载: https://www.jianshu.com/p/a7bedc771204 Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自 ...

  8. Linux实现MySQL数据库凌晨自动备份

    Linux实现MySQL数据库凌晨自动备份 备份多数据库,每天凌晨两点执行,使用当前年月日作为文件夹,不存在该文件夹就创建,删除七天前备份过的文件. 定时调度使用crontab 1 login_use ...

  9. Jetpack的ViewModel与LiveData

    本文基于SDK 29 一.ViewModel与LiveData的作用: 1.viewModel: 数据共享,屏幕旋转不丢失数据,并且在Activity与Fragment之间共享数据. 2.LiveDa ...

  10. Solution -「CF 1025D」Recovering BST

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   ...