上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学习下sed的高级用法。在前面散仙也写过关于sed的基础用法,如果不熟悉的,可以看散仙的前2篇博客温习一下。
sed进阶里面有sed的高级用法,使用sed来处理多行命令,下面我们来看下sed里面特殊的命令:
N:将数据流中的下一行加进来来创建一个多行组来处理
D:删除多行组中的一行
P:打印多行组中的一行
next命令小写的n,会告诉sed编辑器移动到数据流中的下一行文本,而不用重新回到命令的最开始再执行一遍:
[search@h1 821]$ cat a.txt
a
b
c
[search@h1 821]$ sed '/^$/d' a.txt
a
b
c
[search@h1 821]$
删除空白行,现在的需求是删除头行之后的空白行,留下最后一行之前的空白行。
[search@h1 821]$ cat a.txt
a
b
c
[search@h1 821]$ sed '/a/{n ; d}' a.txt
a
b
c
[search@h1 821]$
在这个例子中,脚本要查找含有a单词的唯一行,然后一旦找到它,n命令便会移动到下一行来判断删除,
下面看下如何合并文本:
[search@h1 821]$ cat b.txt
this is a
this is b
hadoop
lucene
[search@h1 821]$ sed '/b/{N ; s/\n/ / }' b.txt
this is a
this is b hadoop
lucene
[search@h1 821]$
依旧是使用查询命令,组合替换命令来合并行
[search@h1 821]$ cat c.txt
我们中国
人
我们的祖国
是china
[search@h1 821]$ sed 'N ; s/中国.人/中国公民/ ' c.txt
我们中国公民
我们的祖国
是china
[search@h1 821]$
下面看下多行删除命令:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed '/^$/{N ; /a/D}' d.txt
a
b
c
[search@h1 821]$
删除第一个空白行。
下面看下多行打印命令:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed -n 'N ; /a/P' d.txt
[search@h1 821]$ sed -n 'N ; /a*/P' d.txt
[search@h1 821]$
下面看下排序命令:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed -n '/a/!p' d.txt
b
c
[search@h1 821]$
感叹号代表取反的意思
下面看下利用正则通配,替换字符:
[search@h1 821]$ echo "this cat sleep in hist cat" | sed 's/.at/".at"/g'
this ".at" sleep in hist ".at"
[search@h1 821]$
下面我们看下,如何在原来的单词上,加上重点标记:
[search@h1 821]$ echo "this cat sleep in hist cat" | sed 's/.at/"&"/g'
this "cat" sleep in hist "cat"
[search@h1 821]$
&符号,可以给本身的这个单词加上替换标记
下面看一些实战小例子:
加倍行间距
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed 'G' d.txt
a
b
c
[search@h1 821]$
去掉末尾的空白行,加倍后:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed 'G' d.txt
a
b
c
[search@h1 821]$ sed '$!G' d.txt
a
b
c
[search@h1 821]$
格式化原来的行:
[search@h1 821]$ cat e.txt
aa
bb
cc
ddd
[search@h1 821]$ sed '/^$/d;$!G' e.txt
aa
bb
cc
ddd
[search@h1 821]$
给文件加个行数:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed '=' d.txt
1
2
a
3
4
b
5
6
c
[search@h1 821]$
比较难看,换一种方式:
[search@h1 821]$ cat d.txt
a
b
c
[search@h1 821]$ sed '=' d.txt
1
2
a
3
4
b
5
6
c
[search@h1 821]$ sed '=' d.txt | sed 'N; s/\n/ /'
1
2 a
3
4 b
5
6 c
[search@h1 821]$
只打印最后一行:
[search@h1 821]$ cat b.txt
this is a
this is b
hadoop
lucene
[search@h1 821]$ sed -n '$p' b.txt
lucene
[search@h1 821]$
删除多余的空白行:
[search@h1 821]$ cat tt.txt
a
bb
b
t
xy
[search@h1 821]$ sed '/./,/^$/!d' tt.txt
a
bb
b
t
xy
[search@h1 821]$
删除开头的空白行:
[search@h1 821]$ cat cc.txt
solr
hadoop
[search@h1 821]$ sed '/./,$!d' cc.txt
solr
hadoop
[search@h1 821]$
删除html标签:
[search@h1 821]$ cat data
<head>
this is a cat
<div>
i have a div
</div>
</head>
[search@h1 821]$ sed 's/<[^>]*>//g;/^$/d' data
this is a cat
i have a div
[search@h1 821]$
分享到:
相关推荐
shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南shell编程指南
shell编程学习资料,常见的shell编程指导,sed,awk。
跟老男孩学Linux运维:Shell编程实战 PDF跟老男孩学Linux运维:Shell编程实战 PDF
《跟老男孩学Linux运维:Shell编程实战》分为五大部分:部分为第1章~第4章,此部分着重介绍新手如何学好Shell编程。涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量...
资深运维架构实战专家及教育培训界*专家十多年的运维实战经验总结,全面系统地讲解运维工作中Shell编程所需的知识点和Shell编程的各种企业级案例。
shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程shell 编程...
shell编程-shell编程-分支语句(1) shell编程-shell编程-分支语句(2) shell编程-shell编程-循环语句(1) shell编程-shell编程-循环语句(2) Linux的shell编程(一) Linux的shell编程(二) Linux的...
shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率
shell编程shell编程shell编程shell编程
跟老男孩学Linux运维:Shell编程实战 完整版 pdf
LINUX与UNIX SHELL编程指南
13Linux下Shell编程之While case演练 14Linux下Shell编程之While case演练 15Shell编程之函数及脚本案例讲解 16Shell编程之函数及脚本案例讲解 17Linux下Shell编程FIND、SED命令实战 18Linux下Shell编程FIND、SED...
shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)
这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...
shell编程入门教程+shell脚本专家指南+UNIX.shell编程24小时教程
shell 编程学习 详细的介绍了shell的东西 非常不错
6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书
Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程Shell编程
经典Linux和unix的Shell编程,按照模板练习即可快速提高。
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...