博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell语法 04-Linux文本处理-sed
阅读量:5348 次
发布时间:2019-06-15

本文共 2637 字,大约阅读时间需要 8 分钟。

  • sed软件从文件或管道中循环的读取一行,处理一行,输出一行。
  • 模式空间,sed软件内部是一个临时缓存,用于存放读取到的内容。

软件版本

sed --versionGNU sed version 4.2.1

语法格式

sed [option] [sed commands] [file]sed [选项]   [sed命令]      [输入文件]

sed选项

选 项 功 能
-n 使用安静模式,在一般情况所有的 STDIN 都会输出到屏幕上,加入-n 后只打印被 sed 特殊处理的行
-e 多重编辑,且命令顺序会影响结果
-f 指定一个 sed 脚本文件到命令行执行
-r Sed 使用扩展正则
-i 直接修改文档读取的内容,不在屏幕上输出

sed 命令

命 令 说 明
a 在当前行后添加一行或多行
c 用新文本修改(替换)当前行中的文本
d 删除行
i 在当前行之前插入文本
h 把模式空间里的内容复制到暂存缓存区
H 把模式空间里的内容追加到暂存缓存区
g 取出暂存缓冲区里的内容,将其复制到模式空间,覆盖该处原有内容
G 取出暂存缓冲区里的内容,将其复制到模式空间,追加在原有内容后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始处理
q 结束或退出 sed
r 从文件中读取输入行
对所选行意外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
p 打印行
w 将行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符转换为另一字符(不能对正则表达式使用 y 命令)

sed地址范围显示

  • sed软件可以对单行或多行进行处理。
  • 如果在sed命令前面不指定地址范围,那么默认会匹配所有行。
  • 用法:n1[,n2]{sed-commands}
    • 地址用逗号分隔的,n1,n2可以用数字、正则表达式、或二者的组合表示。
例子 功能
10i 对第10行操作
10,20i 对10到20行操作,包括第10,20行
10,+20i 对10到30(10+20)行操作,包括第10,30行
1~2i 对1,3,5,7,……行操作
10,$i 对10到最后一行($代表最后一行)操作,包括第10行
/oldboy/i 对匹配oldboy的行操作
/oldboy/,/Alex/i 对匹配oldboy的行到匹配Alex的行操作
/oldboy/,$i 对匹配oldboy的行到最后一行操作
/oldboy/,10i 对匹配oldboy的行到第10行操作如果前10行没有匹配到oldboy,而10行以后匹配oldboy的,则会显示出来。
1,/Alex/i 对第1行到匹配Alex的行操作
/oldboy/,+2i 对匹配oldboy的行到其后的2行操作

增删改查

  • a --追加文本到指定行后
  • i --插入文本到指定行前
在第二行后面添加内容sed '2a 106,dandan,CSO' person.txt
在第二行插入内容sed '2i 106,dandan,CSO' person.txt
在第二行后面添加两行内容sed '2a 106,dandan,CSO\n107,bingbing,CCO' person.txt

  • d --删除指定的行
删除所有行sed 'd' person.txt
删除第二行sed '2d' person.txt
删除第二到五行sed '2,5d' person.txt
删除从第三行开始到最后sed '3,$d' person.txt
删除有关键字zhangyao的行sed '/zhangyao/d' person.txt
删除有oldboy的行到包含Alex的行(范围)sed '/oldboy/,/Alex/d' person.txt

  • c --用新行取代旧行
将第二行替换成其他内容sed '2c 106,dandan,CSO' person.txt
  • s --用一个字符串替换另一个
  • g --在行内进行全局替换
  • -i --修改文件内容
sed -i 's/内容1/内容2/g' oldboy.logsed -i 's#内容1#内容2#g' oldboy.log定界符/或#,也可以是任意符号如:或|等,但当替换内容包含定界符时,需转义。默认sed软件是对模式空间(内存中的数据)操作,而-i选项会更改磁盘上的文件内容。定界符第一个和第二个之间的就是被替换的内容(可以使正则表达式),第二个和第三个之间的就是替换后的内容(必须是具体内容)。
指定行修改内容sed '3s#0#9#' person.txt
指定变量的内容去替换sed "s#$x#$y#g" test.txteval sed 's#$x#$y#g' test.txt
用sed命令重命名当前目录下包含_finished的jpg文件ls *.jpg |sed -r 's#(^.*)_finished.*#mv & \1.jpg#g' |bashls *.jpg    --列出所有的jpg文件sed -r  --使用正则表达式匹配(^.*)       --匹配任意字符串开头_finished.* --匹配包含_finished.,并任意字符串结尾mv &    -- &是显示前面匹配到的结果\1      -- 显示前面括号内匹配到的内容|bash   -- 以命令的形式执行替换后内容修改前stu_102999_1_finished.jpg 以命令的形式执行替换后内容mv stu_102999_1_finished.jpg stu_102999_1.jpg

  • p --输出指定内容
    • 但默认会输出2次匹配的结果
    • 使用n取消默认输出
显示第二行内容sed -n '2p' person.txt
显示第二到第三行sed -n '2,3p' person.txt
显示所有行sed -n 'p' person.txt
显示包含CTO的行sed -n '/CTO/p' person.txt
显示包含CTO的行到包含CFO的行(范围)sed -n '/CTO/,/CFO/p' person.txt
显示从第二行到包含CFO的行(范围)sed -n '2,/CFO/p' person.txt

转载于:https://www.cnblogs.com/liangjingfu/p/9419252.html

你可能感兴趣的文章
边框圆角方法
查看>>
asp.net WebApi自定义权限验证消息返回
查看>>
php中eval函数的危害与正确禁用方法
查看>>
20172315 2017-2018-2 《程序设计与数据结构》第十一周学习总结
查看>>
MySQL添加、修改、撤销用户数据库操作权限的一些记录
查看>>
关于谷歌浏览器Chrome正在处理请求的问题解决
查看>>
Git核心技术:在Ubuntu下部署Gitolite服务端
查看>>
平面波展开法总结
查看>>
建造者模式
查看>>
ArraySort--冒泡排序、选择排序、插入排序工具类demo
查看>>
composer 安装laravel
查看>>
8-EasyNetQ之Send & Receive
查看>>
Android反编译教程
查看>>
List<string> 去重复 并且出现次数最多的排前面
查看>>
js日志管理-log4javascript学习小结
查看>>
Android之布局androidmanifest.xml 资源清单 概述
查看>>
How to Find Research Problems
查看>>
Linux用户管理
查看>>
数据库第1,2,3范式学习
查看>>
《Linux内核设计与实现》第四章学习笔记
查看>>