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 : 做的操作会修改原文件
这个参数的使用要注意,它真的会使修改生效的。想一想已经写好的工程,想看看替换一些小地方后的样子,却又不小心
写错了,结果将整个工程的重要代码给替换了,最后想进入工程按 ‘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) . '\<' ,'\>'
下面的两种用法比较特殊,是sed的特殊功能
上面的语句中是将test保存起来了记为标签1,以后可以使用 '\1' 来引用它。看的不是很清楚的话,下面的例子
会让你明白:
&:保存查找串以便在替换串中引用:s/[0-9]/*&*/g 符号&代表查找串。这个还是自己去试一试,这样你才会
更加的熟悉用法,下面还有一个例子帮助理解。
以上就是sed的基本用法,sed其实支持很多命令和一些选项,例如:
这些选项我并没有一一讲解,经常需要使用它的人就再去好好钻研吧。至于sed一些高级用法,例如在sed中有
"模式空间"和"状态空间"的概念,应该去了解一下,上面给的命令中一些就是针对这两种空间来操作的,我现在还没
有研究好,所以就没写出来,望谅解。
shell脚本学习笔记 (流编辑器sed)相关推荐
- shell脚本学习笔记一
又开始写学习笔记了,呵呵... 今年打算选择一门技术系统的学习一下.编程语言.虚拟机技术.数据库.大数据.云计算在这些种类中,我选择了shell编程.为什么选择shell呢?也没有什么具体的原因.以前 ...
- shell 脚本学习笔记
shell 脚本学习总结: 文件表达式 -e filename 如果 filename存在,则为真 -s file exists and has a size greater than zero. 判 ...
- Shell脚本(学习笔记1)
shell脚本学习记录 为什么学习shell脚本? 在一些复杂的linux维护工作过程中,大量的重复性的输入和交互操作不但费时费力,而且容易出现错误:然而编写shell脚本程序,可以批量处理.自动化的 ...
- Shell学习总结-流编辑器sed
目录 正则表达式 定址 命令与选项 用sed修改文件 元字符 sed范例 106- 正则表达式 与grep一样,sed在文件中查找模式时也要使用正则表达式(RE)和各种元字符.正则表达式是括在斜杠间的 ...
- shell脚本学习笔记(2)
Shell脚本笔记 1.最简单的Shell脚本 Shell脚本是以行为单位的,脚本中所包含的成分主要有:注释(#).命令.Shell变量和结构控制语句. 用户可以使用任何文本编辑器编辑Shell脚本文 ...
- shell脚本——学习笔记(包含应用案例)
题头为本人编写shell脚本格式^v^ #!/bin/bash #**************** #Author: Pakho #Date: 2021-00-00 #FileName: .sh #* ...
- linux 命令自动填充,Shell脚本学习笔记之(自动填充函数模板)
其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...
- shell脚本学习笔记01
shell脚本 1.shell定义 Shell Script [1] ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是 ...
- 菜鸟教程之Shell 脚本学习笔记(二)
Shell 传递参数 $# :传递到脚本的参数个数: $0: 执行的文件名: $n:n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- $*:以一个单字符串显示所有 ...
最新文章
- R算数运算符:+、-、*、/、%%、%/%、^
- ANDROID内存优化(大汇总——中)
- 这篇看完我得理解ES6中中常见语法
- JS 判断手机操作系统代码
- 个推开发者服务进阶之路
- 前端上传数据-按解析顺序
- python获取返回值_【Python】python获取线程的返回值
- 如何利用FNDLOAD更新FORM的Personalization(Moving Personalizations between instances)
- 数据结构开发(11):双向循环链表的实现
- TP-link 路由器 L2TP站点到站点VPN设置
- python旋转图片
- 知乎张瑞: 浅析机器学习理论与实践 | 业界对话
- PyQt5渐变圆环水波进度条+透明淡入(多线程信号)
- 工厂模式(简单工厂,工厂方法,抽象工厂)
- 旗舰级安卓手机推荐 2022年不如买它
- [QMT]04-在QMT之外调用xtquant直接编写策略
- HTTP状态码 ---- 100至600 情况含义
- 12年计算机考研大纲,2012年计算机考研大纲解析之计算机组成原理
- PAT 1166 Summit
- 【Unity2D入门教程】简单制作战机弹幕射击游戏① 导入素材
热门文章
- 网络流媒体--SDP会话描述协议(RFC-4566)
- SUMPRODUCT countif
- heritrix mysql_heritrix的简单使用以及在后台调用heritrix
- 宝宝树CEO王怀南上市前夕内部信:市场需要有价值的好公司
- mockito的入门与使用
- 函数的定义 函数的基本运算 函数的基本性质
- 昆仑通态MCGS与台达伺服ASD-B2 通讯控制案例 通过昆仑通态MCGS触摸屏实现与台达ASD B2通讯控
- LCD1602显示屏原理及使用教程
- oracle中04091,ORA-04091和Compound Trigger(Oracle 11g)
- 接入第三方登录(微信、QQ、新浪微博)