sed

来源:互联网 发布:二级域名 不同端口 编辑:程序博客网 时间:2024/06/06 19:21

sed编辑器

      流编辑器,在编辑器处理数据之前基于预先提供的一组规则来编辑数据流,每次从输入中读取一行,用提供的编辑器命令匹配数据、按命令中指定的方式修改流中的数据,然后将生产的数据输出到STDOUT,在流数据将所有命令与一行数据匹配后,它会读下一行数据并重复这个过程,在流编辑器处理完流中的所有数据行后,它就会终止。

set options screipt file


s命令用斜线间指定的第二个文本字符串来替换第一个文本字符串

echo "This is a test" | sed 's/test/BIG TEST/'


-e执行多个命令

cat data1sed -e 's/brown/green/' -e 's/dog/cat/' data1


从文件中读取编辑器命令

cat script1sed -f script1 data1

替换标记

数字:表明新文本将替换第几处模式匹配的地方

g:表明新文本将会替换所有已有文本出现的地方

p:表明原来行的内容要打印出来

w:将替换的结构写到文件中

cat data5

sed 's/test/trial/2' data5 #替换每行的第二处


sed 's/test/trial/g' data5

sed -n 's/test/trial/p' data6 #打印与指定的模式匹配的行.-n进制sed编辑器输出


sed -n 's/test/trial/w test' data6  #不输出到stdout,输出到test文件
替换字符

转义字符\

 sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd
用!作为字符串分隔符

s!/bin/bash/!/bin/csh!' /etc/passwd

使用地址

       默认情况下,sed编辑器中的命令会作用于文本数据的所有行,如果只想将命令作用于特定某些行,必须使用行寻址

         

[address]commandaddress{     command1     command2     command3}

eg. 指定行

sed '2s/dog/cat/' data1


eg.使用行地址范围

sed '2,4s/dog/cat/' data1  #第2行到第4行


eg.作用到文本结尾

sed '2,$s/dog/cat/' data1  

使用文本模式过滤器

/pattern/command  #只会作用到包含指定文本模式的行上
sed -n '/root/s/bash/csh/p' /etc/passwd


组合命令

sed '2{   #作用到第二条命令上  s/fox/elephant/  s/dog/cat/  }' data1


sed '3,${   #作用到第3行到文本尾  s/fox/elephant/  s/dog/cat/  }' data1


删除行

eg 删除某个范围的行

sed 'd' data1  #删除所有行
sed '3d' data7  #删除第3行




eg删除匹配某个模式的行
sed  '/line number 2/d' data7  #删除与pattern匹配的行


eg. 删除两个模式范围内的行,第一个模式打开行删除功能,第二个模式关闭行删除功能

cat data8sed '/1/,/3/d' data8


附加和插入文本

"Test line 2" | sed 'i\Test line 1'  #使用插入命令时,文本会出现在数据流文本前面


echo "Test line 2" | sed 'a\Test line 1'   #使用附加命令时,文本会出现在数据流文本后面

'3i\This is an inserted line.' data7  #插入到文本第3行


sed '$a\This is a new line of text.' data7



修改行

sed '3c\This is a changed line of text.' data7


sed '/number 1/c\This is a changed line of text.' data8  #修改模式匹配的行


转换命令

唯一可以处理单个字符的编辑器命令

[address]/inchars/outchars/   #inchars和outchars会进行一对一映射
 
sed 'y/123/789/' data8


回顾打印

sed -n '/number 3/p' data7


在修改之前显示行

sed -n '/3/{p                    #修改之前打印s/line/test/p    #修改之后打印}' data7


打印行号

 sed '=' data1

-n '/number 4/{=  #打印行号p}' data74


使用文件

向文件写入

[address] w filename
sed '1,2w test' data7cat test



从文件中读取数据

[address] r filename

sed '3r data12' data7


sed '/number 2/r data12' data7
















0 0
原创粉丝点击