shell之路 Linux正则工具【第二篇】文本处理三剑客之sed

作用

查找或修改符合模式匹配规则(pattern)的所有

命令格式

第一种形式:sed [option] "pattern command" file

第二种形式:stdout | sed [option] "pattern command" 

常用选项

-n	只打印模式匹配行
-e|;	多条命令
-r	支持扩展正则表达式
-i	直接修改文件内容

   

sed -n '/pattern/p' f  打印匹配的行
sed -i∶直接修改读取的文件内容,而不是由屏幕输出     
sed 'm,ns/keyword1/keyword2/g' f  替换(m,n)行(/分隔符可为其它如#)
sed -r 's/(keyword1)(keyword2)/g' f  s代表替换,g代表替换一行的所有

sed -n '/keyword1/p;/keyword2/p' f
sed -n -e '/keyword1/p' -e '/keyword2/p' f

sed中的pattern详解

匹配模式	含义

10command						匹配到第10行
10,20command					匹配从第10行开始到第20行结束
10,+5command					匹配从第10行开始到第16行结束
/pattern1/command				匹配到pattern1的行
/pattern1/,/pattern2/command	匹配到pattern1的行开始
10,/pattern1/command			到匹配到pattern2的行结束匹配从第10行开始
/pattern1/,10command			到匹配到pettern1的行结束匹配到pattern1的行开始,到第10行匹配结束

 

pattern用法:
	1、LineNumber				 		----直接指定行号
		sed -n "17p" file					打印file文件的第17行
		
    2、startLine , EndLine				---指定起始行号和结束行号
		sed -n "10,20p" file 				打印file文件的10到20行
		
    3、startLine, +N		 			---------------指定起始行号,然后后而N行
		sed -n "10,+5p" file				打印file文件中 从第10行开始,往后面加5行的所
		
    4、/pattern1/						----正则表达式匹配的行
		sed -n "/^root/p" file				打印file文件中以root开头的行
			
	5、/pattern1/,/pattern2/			-------从匹配到pattern1的行, 到匹配到pattern2
		sed -n "/^ftp/ ,/^mai1/p" file		打印fi1e文件中第一个匹配到以ftp开头的行,到第二行
		
    6、LineNumber , /pattern1/			----从指定行号开始匹配,直到匹配到pattern1
		sed -n "4,/^hdfs/p" file			打印file文件中从第4行开始匹配,直到以hdfs开头的行

    7、/pattern1/,LineNumber			--从pattern1匹配的行开始,直到匹配到指定行
		sed -n "/root/ ,10p" file			打印file文件中匹配root的行,直到第10行结束

sed中的编辑命令详解

查询(常用):
	1、P	----------打印
	
删除:
	2、d	----------删除
	
增加:
	3、a	---------匹配到的行后追加内容
	4、i	----------匹配到的行前追加内容
	5、r	---将后面指定文件的内容追加到匹配到的行后面
	6、w	----------将匹配到的行内容另存到其他文件中
	
修改(常用):
	7、 s/pattern/ string/		-----------查找并替换,查找符合pattern模式的字符串,将其
		s/pattern/ string/g		-----------g表示全 部行内全部匹配
		s/pattern/ string/2g		-----------2g表示,同一行内,只替换前2个匹配的,剩下的
		s/pattern/string/ig			------------加i参数表示匹配时忽略大小写,g表示匹配到的:
	
其他编辑命令:
	8、=	--显示行号

什么是反向引用?
      &和\1  引用模式匹配到的整个串
      sed "s/l..e/&r/g" file  在file中搜寻以1开头,然后跟两个任意字符,以e结尾的字符串
	  sed "s/\(1..e\)/\1r/g" file  和上面实现- ~样的功能,使用\1代表搜寻到的字符串.\
	  上面两种方式实现了一样的功能,分别使用&和\1引用前面匹配到的整个字符串
      两者区别在于&只能表示匹配到的完整字符串,只能引用整个字符串;而\1可以使用()对匹配到的字符串
	  例如:如果我们仅想要替换匹配到的字符串的一~部分,name必须使用\1这种方式,不能使用&。
      查找test. txt文件中以1开头,紧接着跟两个任意字符,再接一个e的字符串。将找到的字符串中开头的
      sed "s/1\(. .e\) /L\1/g" test. txt

  

案例

查找

替换

不修改原文件并输出

修改原文件

 

 

posted @ 2015-08-26 08:50  沐风先生  阅读(253)  评论(0编辑  收藏  举报