来源:自学PHP网 时间:2015-04-17 17:13 作者: 阅读:次
[导读] 【替换】s1sed mislost long g filename在sed中,文件的每一行都会作为输入传入到sed中,如果不加g那么上述列子中只会替换每一行第一个匹配到的mislost。加g则会匹配一行中所有的m...
【替换】s
在sed中,文件的每一行都会作为输入传入到sed中,如果不加g那么上述列子中只会替换每一行 第一个匹配到的mislost。加g则会匹配一行中所有的mislost。 想要定位一个行,然后去匹配需要这样做
如果这一行包含有test,则将mislost替换为long 在例子中,/test/ 就是一个地址,sed在做操作的时候可以指定0个,1个或者2个地址。每个地
址都是一个描述模式。 ·如果没有指定地址,那么命令将应用于每一行。 ·如果只有一个地址,那么命令应用于这个地址匹配的任意行。 ·如果指定了由逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配到第二个地址的行(包括此行) ·如果地址后面根由感叹号(!),那么命令就应用于不匹配该地址的所有行。
来看一个有趣的例子:
它用.Mis来取代每一个空行。在替换命令的部分(.Mis)不必转义字面的句点,所以我可以直接用.而不需要用\.来转义它。 一个在替换中列出不想被替换的对象
上面的例子只会将--替换为lost 而不会将---替换为lost- 【删除】d
有一个相当重要的概念:
·在sed中,行号指由sed维护的内部行数。该计数器不会因为有多个输入文件而重置。因此,不管指定了多少个输入文件,在输入流中也只有一行1。同样,输入流也只有一个最后的行,可以用$来表示最后一行。
重要:正则表达式必须封闭在斜杠中
如果提供两个地址,那么久指定了命令执行的行范围。比如:
有一个很有用的混合使用行地址和模式地址的列子:
删除了从第一行一直到第一个空行的所有行,可以用来删除某些文件的头文件。 清注意,如果文件中没有空行,将删除所有的行!
正常的删除,sed会将匹配到的行整个删除,如果我们想要只删除行中匹配的部分,可以用替换命令并指定一个空得替换,比如: aabbccdd 想要删除bb 最后的结果为 aaccdd
【提取内容】 来看两个简单的提取例子:
第一个是提取“以root开头的行到以mislost开头的行之间的所有内容”。 第二个是提取“以root开头的行和以mislost开头的行” 【插入、追加和更改】a i c
在以a开头的行下追加mislost 注意:追加和插入只应用于单个行地址,而不是一个范围内的行。更改命令可以处理一个范围内的行。 这里的更改命令要区别于替换,替换只是将匹配的关键字替换了而不是整个行,c\则修改了整个行的内容。 【列表】l 列表命令(l) 用于显示模式空间的内容,将非打印的字符显示为两个数字的ASCII码。 cat test.txt
sed -n -e "l" test.txt
【转换】y
y命令开启转换,转换对应为: a=>x b=>y c=>z PS:转换命令的一个可能的用处是用大写字母替换对应的小写字母
【打印】p
【退出】q 退出命令会使sed停止读取新的输入行(并停止将它们发送到输出)。
打印每一行,直到第50行,并且退出,类似于Unix中的head命令。 同样,这个命令也可以用地址范围来实现
【高级命令】 h或者H 将模式空间的内容复制或者追加到保持空间 g或者G 将保持空间的内容复制或者追加到模式空间 x 交换保持空间和模式空间的内容 【标签】 表示前是任意不多余7个字符的序列。标签占据一行并以冒号开始。 一个有趣的例子
解析: :a定义一个标签a N将下一行的内容添加到当前读入行,并在末尾加一个\n s/\n//将新行中的\n删掉 $!ba如果读入行不是最后一行就跳转到标签a出继续执行后面的执行 这个命令的作用在于将一个文件中的所有行并列为一行内容。 |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com