shell脚本学习笔记 (流编辑器sed)
sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用很普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。
sed不只支持正則表達式。它另一些比較厉害的功能。
我给出一个样例,大家看看有什么办法能够解决它吧。
<html><head><title>Hello World</title>
<body>Welcome to the world of regexp!</body></html>
Hello World
Welcome to the world of regexp!
上面这个HTML文件中的内容怎么通过sed将它变成以下的没有<>的内容呢?我预计在座的非常少有人可以非常快的将它搞定吧,这是我遇到的一个题目,弄了半小时才搞定的。
我用到了sed,先将解题思路给出来解解馋吧^_^
上面的知识一个样例而已,以下要開始介绍sed这款工具的使用了。
首先sed的运行方式有两种:
1. sed option 'script' file1 file2 ...
2. sed option -f scriptfile file1 file2 ...
能够看到sed支持对多个文件操作,事实上它是一行一行的解析的,就像流水一样,知道运行到文件末尾。它的编辑命令
为: /pattem/action 当中pattern是正則表達式,action是编辑操作,以下就介绍一下它的简单使用吧。
1. /pattern/p :打印匹配pattern的行
注意sed默认的是将待处理的已经处理好的都打印出来,所以上面的结果会反复打印匹配的,所以此时我们须要
使用 '-n' 选项来打印我们感兴趣的部分。
2. /pattern/d :删除匹配pattern的行
须要注意的是虽说 'd' 是删除匹配的行,可是它并没有删除文件中面的内容。由于在sed中想要使改动生效,我们
须要用 '-i' 选项。
须要注意最后有 'g' 与无的时候的差别,一个字符对整个的影响事实上非常大。
5. sed -i : 做的操作会改动原文件
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这个參数的使用要注意。它真的会使改动生效的。想一想已经写好的project,想看看替换一些小地方后的样子,却又不小心
写错了,结果将整个project的重要代码给替换了,最后想进入project按 ‘U’还原(此时按U还原是无效的),此时你真的有剁手的冲动。
6.定址
定址用于决定对哪些行进行编辑。地址的形式能够是数字、正則表達式、或二者的结合。假设没有指定地址,sed将处理输入文件的全部行。
可是定址也有好几种情况:
上述这样的情况是按行来定位的,能够打印或删除某一行或者多行,用起来比較简单,比如 sed '1,3d' file ,
sed -n '3p' file , sed -n '2,5p' file 等等。可是以下的情况却是比較复杂的:
当中:
1. sed '/pattem1/,/pantem2/d' :删除全部包括'pattem1' 和 'pattem2' 的行,以及在他们之间的行,从上
述样例中能够看出吧。
2. sde '/patten1/,nd' : 删除包括 'pattem1' 的行到第 n 行的内容
以上两点大家须要自己下去多多尝试一下,由于它却是不易理解。
7.正則表達式
一開始就说sed支持正則表達式,可是却没实用到,嘿嘿。以下就来使用一下吧。
(1). '^' ,'$'
(2).
'.' ,'*'
(3) . '\<' 。'\>'
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
以下的两种使用方法比較特殊。是sed的特殊功能
上面的语句中是将test保存起来了记为标签1,以后能够使用 '\1' 来引用它。
看的不是非常清楚的话,以下的样例
会让你明确:
&:保存查找串以便在替换串中引用:s/[0-9]/*&*/g 符号&代表查找串。这个还是自己去试一试,这样你才会
更加的熟悉使用方法,以下另一个样例帮助理解。
以上就是sed的基本使用方法,sed事实上支持非常多命令和一些选项,比如:
多行时除最后一行外,每行末尾需用”\"续行
这些选项我并没有一一解说,常常须要使用它的人就再去好好钻研吧。
至于sed一些高级使用方法,比如在sed中有
"模式空间"和"状态空间"的概念,应该去了解一下,上面给的命令中一些就是针对这两种空间来操作的,我如今还没
有研究好,所以就没写出来,望谅解。
shell脚本学习笔记 (流编辑器sed)的更多相关文章
- shell脚本学习笔记(符号)
shell脚本的学习: 1.Shell的作用是解释运行用户的命令,用户输入一条命令,Shell就解释运行一条,这样的方式称为交互式(Interactive),Shell还有 一种运行命令的方式称为批处 ...
- Shell脚本学习笔记之(自动填充函数模板)
其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...
- shell脚本学习(3)sed替换
1 sed 替换 1格式: 's/原字符串/新字符串/' 输入源 2正确参考: sed ’s/as/AS/' do.txt 改变字符串as为AS,不会改输入源的文件. 匹配每行第一次匹配的 ...
- shell脚本学习笔记
1.判断符号:中括号[ ] [ ]进行数据的判断,例如我想知道HOME这个变量是否为空,[ -z "$HOME" ],或者两个字符串是否相等,[ "$HOME" ...
- shell脚本学习笔记 (正則表達式)
正則表達式一般有三个部分组成,他们各自是:字符类,数量限定符,位置限定符. 规定一些特殊语法表示字符类.数 量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正則表達式(Regu ...
- linux shell脚本学习笔记一
一.文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tm ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- Shell 基础 -- 流编辑器 sed 详解
一.流编辑器 sed 与命令 sed Linux 中,常使用流编辑器 sed 进行文本替换工作.与常使用的交互式编辑器(如vim)不同,sed 编辑器以批处理的方式来编辑文件,这比交互式编辑器快得多, ...
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
随机推荐
- mongoDB权威指南学习笔记
//mongoDB第1-3章节添加,修改,修改器的笔记: //备注:和MySQL查询一样,时刻想着优化查询数据的时间和性能 //db.help() //数据库帮助信息 //db.blog.help() ...
- 洋媳妇Susan教育孩子的方法
洋媳妇Susan教育孩子的方法 一个中国婆婆跟我说:「我的儿子去美国留学,毕业后定居美国. 还给我找了个洋媳妇Susan. 如今,小孙子Toby已经3岁了. 今年夏天,儿子為我申请了探亲签证. 在美国 ...
- 【BZOJ4477】字符串树(可持久化Trie)
此题花费我整整三天的功夫.还在NoiP贴吧发过贴. 最后发现trie树建新节点时信息未完全复制,真是愚蠢之极. 言归正传. 如果我们已经知道了每个点上的trie树那么询问就是sum[x]+sum[y] ...
- 怎样让enum枚举支持string
原文发布时间为:2011-03-02 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道enum是以下两种情况,不能支持string 1,enum类型是静态 2,enum类型仅限于long、i ...
- wireshark过滤数据
Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换.用来获取网络数据封包,包括http,TCP,UDP,等网络协议包.使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码 ...
- php--获取用户ip
一般在做登录的时候有的会要求同一个帐号不能同时用不同的ip登录,这个时候我们需要获取到用户IP地址 获取ip地址的函数: function getIP() { if (getenv('HTTP_CLI ...
- Ticket Lock, CLH Lock, MCS Lock
如果不用OS提供的mutex,我们该如何实现互斥锁?(不考虑重入的情况) 1. naive lock 最简单的想法是,搞一个volatile类型的共享变量flag,值可以是flase(无锁)或者tru ...
- Codeforces Gym100814 I.Salem-异或 (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题就是二进制,找两个数相应的二进制相对应的位置上数不同的最多的个数.异或写就可以. 一开始还想麻烦了,找出来最大的偶数和最大的奇数,最小的偶数和最小的奇数,但是这样想考虑的不全.因为范围比较小,直 ...
- go语言学习之路六:接口详解
Go语言没有类和继承的概念,但是接口的存在使得它可以实现很多面向对象的特性.接口定义了一些方法,但是这些方法不包含实现的代码.也就是说这些代码没有被实现(抽象的方法).同时接口里面也不包含变量. 看一 ...
- Windows Server 2008 IE 无法调整安全级别
开始”/“程序”/“管理工具”/“服务器管理器”命令,在弹出的服务器管理器窗口中,找到“安全信息”设置项,单击其中的“配置IE ESC”选项,打开如下图所示的IE增强安全配置窗口.