文档章节

sed指定行范围匹配(转贴!)

雁南飞丶
 雁南飞丶
发布于 2017/08/24 12:01
字数 1375
阅读 25
收藏 0
点赞 0
评论 0
sed -n '5,10{/pattern/p}' file

sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、 删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节 省了时间。sed必须通过行号和正则表达式指定要改变的文本行

sed怎样读取数据:
sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位 行号编辑它,重复过程直到命令结束

sed命令的调用:
在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行
sed [option] sed命令 输入文件            在命令行使用sed命令,实际命令要加单引号
sed [option] -f sed脚本文件 输入文件     使用sed脚本文件
sed脚本文件 [option] 输入文件            第一行具有sed命令解释器的sed脚本文件
option如下: 
n 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行
c 下一命令是编辑命令,使用多项编辑时加入此选项
f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如
sed -f myscript.sed input_file  这里myscript.sed即为支持sed命令的文件
使用重定向文件即可保存sed的输出

使用sed在文本中定位文本的方式:
x       x为一行号,比如1
x,y     表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/    查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/   查询包含两个模式的行,如/disk/disks/
/pattern/,x  在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/  通过行号和模式查询匹配行,如 3,/disk/
x,y!    查询不包含指定行号x和y的行

基本sed编辑命令:
p      打印匹配行                      c/    用新文本替换定位文本
=      显示文件行号                    s     使用替换模式替换相应模式
a/     在定位行号后附加新文本信息        r     从另一个文本中读文本
i/     在定位行号后插入新文本信息        w     写文本到一个文件
d      删除定位行                      q     第一个模式匹配完成后退出或立即退出
l      显示与八进制ASCII代码等价的控制字符        y  传送字符
n      从另一个文本中读文本下一行,并附加在下一行   {}     在定位行执行的命令组
g      将模式2粘贴到/pattern n/

基本sed编程举例:
使用p(rint)显示行: sed -n '2p' temp.txt   只显示第2行,使用选项n
打印范围:  sed -n '1,3p' temp.txt         打印第1行到第3行
打印模式:  sed -n '/movie/'p temp.txt     打印含movie的行
使 用模式和行号查询:  sed -n '3,/movie/'p temp.txt   只在第3行查找movie并打印
显示整个文件:  sed -n '1,$'p temp.txt      $为最后一行
任意字符:  sed -n '/.*ing/'p temp.txt     注意是.*ing,而不是*ing
打印行号:  sed -e '/music/=' temp.txt
附加文本:(创建sed脚本文件)chmod u+x script.sed,运行时./script.sed temp.txt
#!/bin/sed -f
/name1/ a/             #a/表示此处换行添加文本
        HERE ADD NEW LINE.     #添加的文本内容
插入文本: /name1/ a/ 改成 4 i/ 4表示行号,i插入
修改文本: /name1/ a/ 改 成 /name1/ c/ 将修改整行,c修改
删除文本: sed '1d' temp.txt  或者 sed '1,4d' temp.txt
替 换文本: sed 's/source/OKSTR/' temp.txt     将source替换成OKSTR
sed 's//$//g' temp.txt             将文本中所有的$符号全部删除
sed 's/source/OKSTR/w temp2.txt' temp.txt 将替换后的记录写入文件temp2.txt
替换修改字符串: sed 's/source/"ADD BEFORE" &/p' temp.txt
结果将在source字符串前面加上"ADD BEFORE",这里的&表示找到的source字符并保存
sed结果写入到文件: sed '1,2 w temp2.txt' temp.txt
sed '/name/ w temp2.txt' temp.txt
从文件中读文本: sed '/name/r temp2.txt' temp.txt
在每列最后加文本: sed 's/[0-9]*/& Pass/g' temp.txt
从 shell向sed传值: echo $NAME | sed "s/Go/$REP/g"   注意需要使用双引号

快速一行命令:
's//.$//g'         删除以句点结尾行
'-e /abcd/d'       删除包含abcd的行
's/[][][]*/[]/g'   删除一个以上空格,用一个空格代替
's/^[][]*//g'      删除行首空格
's//.[][]*/[]/g'   删除句号后跟两个或更多的空格,用一个空格代替
'/^$/d'            删除空行
's/^.//g'          删除第一个字符,区别  's//.//g'删除所有的句点
's/COL/(.../)//g'  删除紧跟COL的后三个字母
's/^////g'         删除路径中第一个/

 

sed '1{:a;N;6!ba};N;${P;Q};D'
awk '{a[NR%7]=$0}END{print a[(NR-6)%7]}'

从性能上来讲,倒数几行的问题,还是用tail的好
tail -7 | head -1

 

© 著作权归作者所有

共有 人打赏支持
雁南飞丶
粉丝 37
博文 124
码字总数 216404
作品 0
西安
运维
9.1-9.7 正则三剑客:grep、sed、awk

grep工具 grep是什么 grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使...

熊猫头先生 ⋅ 前天 ⋅ 0

9.4/9.5 sed工具(上、下)

9.4-9.5 sed命令 sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern s...

Champin ⋅ 2017/11/21 ⋅ 0

sed工具与正则表达式的使用(shell第四天)

sed工具 【流式编辑器】 —— 非交互,基于模式匹配过滤及修改文本 —— 逐行处理,并将结果输出到屏幕 ——可实现对文本的输出,删除,替换,复制,剪切,导入,导出等各种操作 命令格式: ...

Morning晨丿 ⋅ 04/30 ⋅ 0

查找目录下的所有文件中是否含有某个字符串 

查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式 (1...

wangxuwei ⋅ 05/07 ⋅ 0

每日一道shell练习(09)——sed处理

1. 习题 对一个文件,1至5行删除带有英文的行,6至10行删除里面的英文字符; 2. 分析 这种要求,用sed命令就可以解决了,主要用到匹配替换的知识。 3. 脚本 前两个要求,必须使用行号匹配。主...

hello_cjq ⋅ 05/29 ⋅ 0

Linux下使用xargs将多行文本转换成一行并用tr实现逗号隔开

准备: cat test.txt134 示例: cat test.txt | xargs1 3 4 可以看出得到的字符串为空格隔开的。 再把上面的字符串用逗号隔开,可以使用tr命令进行空格的替换 cat test.txt | xargs | tr ' ...

easonjim ⋅ 01/20 ⋅ 0

Linux下高效指令(很重要)

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和6...

寰宇01 ⋅ 04/23 ⋅ 0

mac自带的sed和linux表现不一致, 需要安装gnu-sed

1.本来想把逗号替换成换行,结果不行。 $echo "a,b,c,d" |sed 's/,/n/g' anbncnd 网上查了一下,原来是mac的sed对n的处理和linux不一样, 详见:http://superuser.com/questions/307165/newl...

孟飞阳 ⋅ 06/06 ⋅ 0

Linux 中几个高效过滤命令

过滤器是一个程序,它从标准输入读取数据,在数据上执行操作,然后把结果写到标准输出。 因此,它可以用来以强大的方式处理信息,例如重新结构化输出以生成有用的报告,修改文件里面的文本,...

问题终结者 ⋅ 05/15 ⋅ 0

第十一课(下):grep,sed,awk三剑客

grep命令 grep [-cinvABC] 'word' filename -c行数 -i不区分大小写 -n显示行号 -v取反 -r遍历所有子目录 -A后面跟数字,过滤出符合要求的行以及下面n行 -B后面跟数字,过滤出符合要求的行以及...

Linux学习笔记 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部