Linux中文本内容处理指令与三剑客之sed

昨日内容回顾

1.写出过滤手机号的正则表达式
	1[0-9]{10}
	1开头 0-9的数字 十位
    
2.写出过滤邮箱的正则表达式
	[a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn|com\.cn|net)
	小a到小z大A到大Z0-9数字杠下划线 至少一位 @ 小a到小z0-9数字 至少一位 点 com或cn或com.cn或net
    
3.过滤密码,要求必须要大写字母、小写字母、数字以及下划线,长度在 8 到 16 之间
	([A-Z]+[a-z]+[0-9]+_+){8,16}
	大A到大Z至少一位 小a到小z至少一位 0-9数字至少一位 下划线至少一位 8到16位
    
4.过滤本地的IP
	ip a | grep -E '([(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]\.){3}[(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]'
	查看IP信息给grep取匹配 1开头0-9数字两位 》三位 2开头0-4数字0-9数字 》三位 25开头0-4	数字 》3位 0-9数字 》1位到2位 点  》》3位  1开头0-9数字两位 》三位 2开头0-4数字0-9数字 》三位 25开头0-4数字 》3位 0-9数字 》1位到2位

今日内容概要

  • 文本处理命令
  • 三剑客之sed

内容详细

文本处理命令

# 1.sort命令
	用于将文件的内容加以排序(不加参数 默认用每行第一个字符排序)
    
	sort 参数 文件
	参数:
		-n :	依照数字的值的大小排序
		-r :	以相反的顺序来排序(降序)
		-k :	以某列进行排序(按照指定范围比较)
		-t :	指定分隔符 默认是以空格为分隔符
		-b :	忽略每一行前的所有空白字符,从第一个可见字符比较
		-f :	忽略字母大小写,默认情况下,会将大写字母排在前面
	案例:
		sort 1.txt  # 输出的文件内容是依照第一个字符排序
        	
		sort -n 1.txt  # 依照数字的值的大小排序显示
        	
		cat 1.txt | sort -n -r -k3 -t '|'  # 以|分割的第三列 反序来排序
        	

# 2.uniq命令
	用于检查及删除文本内容中重复出现的行列 一般与sort连用
	在单独使用时 只会把文本内相邻的行去重 不相邻不去重 
	所以先用sort排序再去重
    
	uniq 参数 文件
	参数:
		-c :	在每行开头显示该行出现的次数
		-d :	仅显示重复的内容
		-u :	仅显示未重复的内容
	案例:
		sort 1.txt | uniq -u  # 输出的只有未重复的内容
        	
		sort 1.txt | uniq -d  # 输出的只有重复的内容
    		
            
# 3.cut命令
	显示行中的指定部分,删除文件中指定字段
    
	cut 参数 文件
	参数:
		-d :	指定字段的分隔符,默认的字段分隔符为"TAB"
		-f+n :	显示指定字段的内容
	案例:
		cut -d '|' -f3 1.txt  # 只显示按|分割后的 第三列内容
        	
        
# 4.tr命令
	替换或删除命令
	tr不能直接加文件使用
    
	tr 被替换内容 新内容
	参数:
		-d :	删除字符(不会被显示出来)
	案例:
		cat 1.txt | tr 01 908  # 文本内容中的0被替换为9 1被替换为0 一一对应替换
    		
		cat 1.txt | tr -d 2  # 文本内容中的2 不会显示
        	
            
# 5.wc命令
	统计 计算数字
    
	参数:
		-c :	统计文件的bytes数
		-l :	统计文件的行数
		-w :	统计文件中单词的个数 默认以空白字符为分隔符
	案例:
		cat 2.txt | wc -c  # 文本末尾会默认有空格占用一个bytes 所以查询结果是内容的bytes数+1  
			  
		wc -c 2.txt  # 会显示bytes数+1 +文件名
        	
            
'''
在Linux中 一段连续的数字或字母为一个单词
wc统计时 默认以空格来表示当前单词结束 开始下一个
'''

三剑客之sed

# sed是linux中,流媒体编辑器
	grep :	过滤文本
	sed :	修改文本
	awk :	处理文本
        
# 1.格式
	sed 参数 '处理规则' 操作对象
    
	参数:
		-e :	允许多项编辑
		案例:
			sed '3d' 1.txt  # 除了第三行 其他都正常显示
            
			sed -e '3d' -e '6d' 1.txt  # 除了第三行第六行 其他都正常显示
            
            
		-n :	取消默认输出
		案例:
			sed -e '3d' -e '6d' -n 1.txt  # 不会显示内容(d:删除模式)
            
			sed -n '5p' 1.txt  # 只打印第五行 其余内容不输出(p:打印模式)
            
            
		-i :	就地编辑(将操作的内容直接写入文本中 不需要通过vim或echo)
		案例:    
			sed -i '5p' 1.txt  # 将第五行的内容再写入到文本 同样内容会出现两次
            
			sed -i '5d' 1.txt  # 把第五行内容直接从文本中删除
            
            
		-r :	支持拓展正则
			// : 表示正则
		案例:
			sed -r '/23/d' 1.txt  # 删除正则匹配到的所有包含 23 的行
            
            
		-f :	指定sed匹配规则脚本文件
		案例:
			1.txt内容为: /23/d
			sed -f 1.txt 2.txt  # 执行结果等同于 sed -r '/23/d' 1.txt

# 2.定位
	1.数字定位法
		案例:	
			指定行号
			sed '3d' 1.txt  # 第三行删除
			sed '3,4d' 1.txt  # 第三行到第四行删除
            
	2.正则定位法
		案例:	
			指定正则定位
			sed '/g/d' 2.txt  # 包含g的行都删除
            
	3.数字和正则定位法
		案例:
			sed '2,/^g/d' 2.txt  # 第二行到以g开头的行都删除
        	
    
	4.正则正则定位法
		案例:
			sed '/^q/,/^y/d' 2.txt  # 以q开头的行到以y开头的行都删除
            
# 3.sed的编辑模式
	d :	删除
	p :	打印
	a :	在当前行之后添加一行或多行
		案例:
			sed '2axxx123' 2.txt  # 在第二行之后添加一行内容 xxx123
            
	c :	用新文本修改(替换)当前行
		案例:
			sed '2cxxx /123' 2.txt  # 第二行内容显示为 xxx /123
            
	i :	在当前行之前,插入文本(单独使用时)
		案例:
			sed '2ixxx /123' 2.txt  # 第二行内容显示为 xxx /123 原第二行顺延至第三行
            
	r :	在文件中读其他文件内容(插入到文件每行之后)
		案例:
			sed '2r 1.txt' 2.txt  # 1.txt的所有内容都插入到 2.txt的第二行之后显示
			sed 'r 1.txt' 2.txt  # 1.txt的所有内容都插入到 2.txt的每一行之后显示
            
	w :	将文件指定行写入其他文件
		案例:
			sed '2w 1.txt' 2.txt  # 将2.txt文件的第二行 写入(覆盖模式)到1.txt中 
            
	y :	将字符转换成另一个字符
		案例:
			sed 'y/qg/AB/' 1.txt  # 将1.txt文件中的 q替换为A g替换为B 一一对应替换
            
	s :	将字符串转换成另一个字符串(每一行 只替换一次)
		案例:  # 不是字符一一对应了 而是一串对应一串
			sed 's/qe/A/' 2.txt  # 将2.txt文件中 qe(必须连在一起)整体替换为 A 但是如果同一行不止一处 qe 则只会从左往右替换一处就停止该行匹配
            
	g :	全部执行
		案例:
			sed 's/qe/A/g' 2.txt  # 将2.txt文件中 qe(必须连在一起)整体替换为 A 无论一行有几处 qe 全部完成替换
            
	i :	忽略大小写(要跟s 模式连用)
		案例:
			2.txt中只有小写字母
			sed 's/G/B/gi' 2.txt  # 将2.txt中的 g无论大小写 全部替换为B
     
	& :	代表前面匹配的内容
    
            
# 练习
	1.将/etc/nginx/nginx.conf中的注释行全部去掉
		sed '/^ *#/d' /etc/nginx/nginx.conf
    
	2.将/etc/nginx/nginx.conf中每一行之前增加注释
		sed 's/.*/# &/g' /etc/nginx/nginx.conf
    
	3.要求一键修改本机的ip 100>>101
		sed -i 's/.100/.101/g'  /etc/sysconfig/network-scripts/ifcfg-eth[01]
    
	4.将/etc/passwd中的root修改成ROOT
		sed 's/root/ROOT/g' /etc/passwd
posted @ 2021-12-21 20:26  Deity_JGX  阅读(60)  评论(0编辑  收藏  举报