sed语法

sed : Stream editor ,逐行处理文本
	行编辑器sed
	全屏编辑器vi

模式空间:	默认不编辑原文件,仅对模式空间中的数据做处理;而后处理结束后将模式空间打印至屏幕
	
sed [options] 'AddressCommand' file...
	options:
	-n: 静默模式,只打印符合条件的行
Address
1、StartLine,endLine
	1,100
	$:最后一行   sed -n '$p' test.txt
	倒数第二行   tac test.txt |sed -n 2p
2、	/RegExp/
	/^root/
3、/pattern1/,/pattern2/
	第一次被模式1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNum	
	指定的行
5、	StartLine,+N
	从StartLine行开始,向后的N行

Command:
d:删除符合条件的行
  例:删除前2行 sed '1,2d' /etc/fstab
      删除包含oot的行 sed '/oot/d' /etc/fstab
p:显示符合条件的行
  例:显示以/开头的行 sed '/^\//p' /etc/fstab (符合条件的显示了2次,不符合的显示一次)
      显示以/开头的行 sed -n '/^\//p' /etc/fstab
a \string:在指定的行后面追加新行,内容为string
  例:在以/开头的行后面追加# hello world  sed '/^\//a \# hello world' /etc/fstab
	\n换行				sed '/^\//a \# hello world\n# hello linux' /etc/fstab
i \string:在指定的行前面追加新行,内容为string	
r filename:将指定文件的内容添加至符合条件的行处
  例:将/etc/issue文件的内容添加在第二行后面 sed '2r /etc/issue' /etc/fstab
					     sed '1,2r /etc/issue' /etc/fstab
s:替换
  例:把行内的所有jzk替换成jinzk,如果没有g,则只替换行内的第一个jzk   ==>sed 's/jzk/jinzk/g' test1.txt
	只打印发生替换的那些行                                          ==>sed -n 's/jzk/jinzk/p' test1.txt
	在所有的jzk后面添加def(&表示匹配的内容)                       ==>sed  's/jzk/&def/' test1.txt
	把所有的jzk替换成jinzk,并打印发生替换的那些行                  ==>sed  -n 's/jzk/jinzk/gp' test1.txt
	把所有的jzk替换成jinzk,跟在替换s后面的字符就是查找串和替换串之间的分割字符,本例中试#   ==>sed  's#jzk#jinzk#g' test1.txt
			
  逗号:指定行的范围
  例:打印模式jzk到jd的行                                  ==>sed -n '/jzk/,/jd/p' test1.txt
	打印从第五行到包含jd行之间的行                       ==>sed -n '5,/jd/p' test1.txt
	修改从模式jzk到模式jd之间的行,把wyq替换成wuyaqin    ==>sed -n '/jzk/,/jd/s/wyq/wuyaqin/p' test1.txt

-e:多重编辑
  例:删除1-3行,然后把其余行的abc替换成def  sed  -e ‘1,3d’ -e ‘s/abc/def/g’ test1.txt

w:写文件
  例:在包含jzk的行写入test2.txt   ==>sed '/jzk/w test2.txt' test1.txt

n:读取下一行
  例:读取包含jzk的行的下一行,替换jzk为jdddd     ==>sed  '/jzk/{n ; s/jzk/jdddd/g;}' test1.txt

		

猜你喜欢

转载自jinjzk.iteye.com/blog/2243305
sed
今日推荐