sed

sed编辑器

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

set options screipt file


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

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


-e执行多个命令

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


从文件中读取编辑器命令

cat script1
sed -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]command
address{
     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 data8
sed '/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
}' data7
4


使用文件

向文件写入

[address] w filename
sed '1,2w test' data7
cat test



从文件中读取数据

[address] r filename

sed '3r data12' data7


sed '/number 2/r data12' data7
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值