网站地图    收藏   

主页 > 系统 > windows >

我最爱的流编辑器sed用法总结 - Windows操作系统

来源:自学PHP网    时间:2015-04-17 17:13 作者: 阅读:

[导读] 【替换】s1sed mislost long g filename在sed中,文件的每一行都会作为输入传入到sed中,如果不加g那么上述列子中只会替换每一行第一个匹配到的mislost。加g则会匹配一行中所有的m...

【替换】s

1 sed'/mislost/long/g' filename

在sed中,文件的每一行都会作为输入传入到sed中,如果不加g那么上述列子中只会替换每一行

第一个匹配到的mislost。加g则会匹配一行中所有的mislost。

想要定位一个行,然后去匹配需要这样做

1 sed'/test/s/mislost/long/g' filename

如果这一行包含有test,则将mislost替换为long

在例子中,/test/ 就是一个地址,sed在做操作的时候可以指定0个,1个或者2个地址。每个地

1 sed'/test/s/mislost/long/g' filename

址都是一个描述模式。

·如果没有指定地址,那么命令将应用于每一行。

·如果只有一个地址,那么命令应用于这个地址匹配的任意行。

·如果指定了由逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配到第二个地址的行(包括此行)

·如果地址后面根由感叹号(!),那么命令就应用于不匹配该地址的所有行。

 

来看一个有趣的例子:

1 sed s'/^$/.Mis'

它用.Mis来取代每一个空行。在替换命令的部分(.Mis)不必转义字面的句点,所以我可以直接用.而不需要用\.来转义它。

一个在替换中列出不想被替换的对象

1 sed '/---/!s/--/lost/'

上面的例子只会将--替换为lost 而不会将---替换为lost-

【删除】d

  sed 'd' 它将删除所有的行
sed '1d' 它将只删除第一行

有一个相当重要的概念:

1 sed '1d' file1 file2 它将只删除file1的第一行,不会删除file2的第一行

·在sed中,行号指由sed维护的内部行数。该计数器不会因为有多个输入文件而重置。因此,不管指定了多少个输入文件,在输入流中也只有一行1。同样,输入流也只有一个最后的行,可以用$来表示最后一行。

 

重要:正则表达式必须封闭在斜杠中

  /^$/d 只删除空行
^$d 这样的使用方法则是错误的
$!d 这样表示除了最后一行,都删除掉

如果提供两个地址,那么久指定了命令执行的行范围。比如:

1 /^mislost/,/^long/d 删除以mislost开头的到以long开头的左右行

 

有一个很有用的混合使用行地址和模式地址的列子:

1 1,/^$/d

删除了从第一行一直到第一个空行的所有行,可以用来删除某些文件的头文件。

清注意,如果文件中没有空行,将删除所有的行!

 

正常的删除,sed会将匹配到的行整个删除,如果我们想要只删除行中匹配的部分,可以用替换命令并指定一个空得替换,比如:

aabbccdd 想要删除bb 最后的结果为 aaccdd

 

1 sed 's/bb//'

 

【提取内容】

来看两个简单的提取例子:

  sed -n '/^root/,'/^mislost/p'
sed -n '/^root/p;/^mislost/p'

第一个是提取“以root开头的行到以mislost开头的行之间的所有内容”。

第二个是提取“以root开头的行和以mislost开头的行”

【插入、追加和更改】a i c

1 sed '/^a/i\mislost' 插入 在以a开头的行上插入一行mislost
1 sed '/^a/a\mislost' 追加 在以a开头的行下追加一行mislost
1 sed '/^a/c\mislost' 更改 把以a开头的行修改为mislost

在以a开头的行下追加mislost

注意:追加和插入只应用于单个行地址,而不是一个范围内的行。更改命令可以处理一个范围内的行。

这里的更改命令要区别于替换,替换只是将匹配的关键字替换了而不是整个行,c\则修改了整个行的内容。

【列表】l

列表命令(l) 用于显示模式空间的内容,将非打印的字符显示为两个数字的ASCII码。

cat test.txt

aaaa www.baidu.com
bbbb www.sina.com.cn
cccc www.qq.com

 

sed -n -e "l" test.txt

 

  aaaa\twww.baidu.com$
bbbb\twww.sina.com.cn$
cccc\twww.qq.com$

 

【转换】y

 

1 sed 'y/abc/xyz'

y命令开启转换,转换对应为:

a=>x

b=>y

c=>z

PS:转换命令的一个可能的用处是用大写字母替换对应的小写字母

 

【打印】p

 

【退出】q

退出命令会使sed停止读取新的输入行(并停止将它们发送到输出)。

 

1 sed '/50q/'

打印每一行,直到第50行,并且退出,类似于Unix中的head命令。

同样,这个命令也可以用地址范围来实现

1 sed -n '1,50p'

 

【高级命令】

h或者H 将模式空间的内容复制或者追加到保持空间

g或者G 将保持空间的内容复制或者追加到模式空间

x 交换保持空间和模式空间的内容

【标签】

表示前是任意不多余7个字符的序列。标签占据一行并以冒号开始。

一个有趣的例子

1 sed ':a;N;s/\n//;$!ba'

解析:

:a定义一个标签a

N将下一行的内容添加到当前读入行,并在末尾加一个\n

s/\n//将新行中的\n删掉

$!ba如果读入行不是最后一行就跳转到标签a出继续执行后面的执行

这个命令的作用在于将一个文件中的所有行并列为一行内容。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论