linux三剑客之sed 流媒体编辑器

目录

linux三剑客之sed

定义: 流媒体编辑器 
	# 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
	
三剑客:
grep :过滤文本
sed  :修改文本
awk  :处理文本

1、 sed格式: sed 参数 '处理规则' 操作对象

# 暂时补充:d为编辑模式:删除

2、 定位:
	1、数字定位法
		指定行号:
			sed '3d' 4.txt  (删除文本中的第三行)
			sed '2,4d' 4.txt  (删除文本中的第二行到第四行)
	
	2、正则定位法
		sed '/^g/d' 2.txt  (删除正则匹配到的g开头的行)
	
	3、数字和正则定位法
		sed '3,/^g/d' 2.txt  (删除第三行到正则匹配到的行 :第三行到开头为g的行)
	
	4、正则且正则定位法
		sed '/^g/,/^j/d' 2.txt(删除前一个正则和后一个正则匹配到行之间所有的行)


3、 sed 参数:
		
	
			-e :允许多项编辑
				eg : sed -e '4d' -e '5d' 4.txt (这样就删除的第4行与第5行)
				
			-n :取消默认输出(静默输出)
				eg :sed -n '5d' 4.txt (删除第5行 但是不打印出来)
				
 			-i :就地编辑(打印出来的内容直接写入到文件里)
 				eg :sed -i '5p' 4.txt 
 					cat 4.txt  (此时就打印第一行 直接编辑写入到文件中)
 				
			-r :支持拓展正则
				eg :sed -r '/123/d' 4.txt # 两个斜线当中为正则
					(此时就删除正则匹配到的123 并打印出来)
					
			-f :指定sed匹配规则脚本文件(解决命令冗余问题,有可能正则命令很多就容易错)
				
				eg :把正则写入到文件中2.txt /123/d 利用脚本文件来操作另一个文件
					sed -f 2.txt 4.txt 
					(此时和上边的结果时一摸一样的。)
					

sed 编辑模式

		
4、 sed的编辑模式:
	d :删除
		sed '2d' 4.txt (删除文本中的第二行)
		
	p :打印
		sed '2p' 4.txt (打印文本中的第二行)
		
	a :在当前行后添加一行或多行
		sed '2axxx' 4.txt (在第2行下一行 添加xxx成立单独的一行(第三行))
		
	c :用新文本修改(替换) 当前行
		sed '2cxxx' 4.txt (将第二行的内容修改(替换)成xxx)
		
	i :在当前行之前,插入文本(单独使用时)
		sed '2ixxx' 4.txt (在第二行的前一行 添加xxx成立单独的一行(第二行))
	
	r :在文件中读内容
		sed '2r 3.txt' 4.txt (在第二行的下一行插入3.txt文本中的内容)
		
	w :将指定行写入文件
		sed '2w 3.txt' 4.txt (将4.txt文本中的第二行内容写入到3.txt文本中)
		cat 3.txt     	(查看3.txt文本只有第二行内容 ) # 故:所有是清空并写入
		
	y :将字符转换成另一个字符
		sed '2y/af/AF' 4.txt (将文本中第二行的小a替换成大A 小f替换成大F)
		
	s :将字符串转换成另一个字符串(每一行只替换一次)
		sed 's/22/33' 4.txt 
				(将文本中的22替换成33 如果某一行中有类似于22s22的只替换第一个22)
				
	g :全部执行(将功能应用到整行)
		sed 's/22/33/g' 4.txt
				(将文本中'所有的'的22替换成33 )
				
	* i :忽略大小写(跟 s 模式一起使用时)
		sed 's/F/adad/gi' 4.txt (将文本中的f或F 全部替换成adad )
		
	& :代表前面匹配到的内容 之前 添加本层匹配到的内容

		,& 就代表在匹配到的内容前添加一个 ,
		
	# 案例:将nginx.conf 中每一行前面添加一个#
		sed 's/.*/# &/g' /etc/nginx/nginx.coonf
	
案例: 
1、将nginx.conf 中的注释行全部去掉
	[root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
	
2、要求一键修改本机的ip
	sed -i 's/\.100/\.101/g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
	
3、将/etc/passwd中的root修改成ROOT
	sed -i 's/root/ROOT/g' /etc/passwd
上一篇:Linux sed命令的使用及正则表达式


下一篇:linux三剑客之sed