邵邵。

导航

sed

概要

1.文本处理器
2.linux之sed

详细

1.文件处理命令

1.sort命令:
	用于将文件内容排序
	默认以内容第一个字符为排序标准
	
	参数:
		-n		:依照数值进行排序
			sort -n 文件路径
		-r		:倒序
			sort -r 文件路径
		-k		:以某列进行排序
			sort -k数字 文件路径
				注:默认每行空格为分隔符,
		-t		:指定分隔符,默认空格
			sort -t'分隔符'

2.uniq命令:
	用于检查及删除文本文件中重复的行列,一般与sort结合使用
	仅仅去掉上下相邻的重复行,可以用sort排序后去重
	
	参数:
		-c		:在打印出来的行列中显示该行重复的次数
		-d		:仅显示重复出现的列
		-u		:仅显示一次出现的列

3.cut命令:
	显示行中的指定部分,删除文件中指定的字段
	
	参数:
		-d		:指定字段的分隔符,默认为‘tab’
		-f		:指定显示的列
				2222 4
				将文本内容以'2'分割,如果分隔符在某列的第一位,则前一位算第一列,即’2‘分割出五列’4’为第五列

4.tr命令:
	替换或删除
		tr 原内容 新内容
			注:一个字符一个字符替换
		
	参数:
		-d		:删除字符

5.wc命令:
	统计,计算数字
	
	参数:
		-c		:统计文件的Bytes数
		-l		:统计文件的行数
		-w		:统计文件中单词的个数,默认空格为分隔符
			注:
				在linux中,一段连续的数字或者字母组合为一个‘词’

2.sed

grep		:过滤文本
sed		:修改文本
swk		:处理文本
在以上三个中:!表示取反
sed是linux中的流媒体编辑器

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

2.参数:
	-e		:允许多项编辑
		sed ‘3d’ 路径 (单项编辑)
		sed -e '4d' -e '5d' 路径 (多项编辑)
			3	:文件内行数
			d	:编辑模式
	-n		:取消默认输出
		sed -d '4d' -e '5d' -n 路径
			不会打印出来
	-i		:就地编辑
		将打印出来的直接写入文件而不会打印出来
	-r		:支持扩展正则
		sed -r '/123/d' 路径
			/ /:中写入正则也可写入带正则的文件
			将正则写入一个文件内,文件路径可以写入/ /中
	-f		:指定sed匹配规则脚本文件
		创建一个脚本文件,可以被sed调用

3.定位:
	1.数字定位法:
		指定文本内的行号
			sed '3d' 文件路径
				3:文件内的第三行
				d:编辑模式
			sed '2,3d' 文件路径
				2,3:第二行到第三行
	2.正则定位法::
		sed '/g/d' 文件路径
			包含g的行删除
		sed '/^g/d' 文件路径
			g开头的行删掉
	3.数字和正则定位法:
		指定数字后是正则
			sed '数字行号,/^g/d' 文件路径
				从数字行匹配到正则匹配到的行
	4.正则和正则定位法:
		sed '/^g/,/j/d' 文件路径
			从以g开头的行删除到包含j的行

4.sed编辑模式:
	d	:删除(整行删除)
		精确删除(行号)	:sed -n '3p' 1.txt
			删除第三行
		指定范围删除(行号)	:sed -n '2,5p' 1.txt
			删除2到5行
		内容删除(grep过滤)	:sed -n '/xxx/p' 1.txt
			删除xxx行的内容
		范围删除(过滤)	:sed -n '/xxx/,/ccc/' 1.txt
			删除xxx到ccc所有行的内容
		混合删除(行号+过滤)	:sed -n '2,/xxx/' 1.txt
			删除第2行到包含xxx行的内容
	p	:打印(查找)
		精确查找(行号)	:sed -n '3p' 1.txt
			查找第三行
		指定范围查找(行号)	:sed -n '2,5p' 1.txt
			查找2到5行
		内容查找(grep过滤)	:sed -n '/xxx/p' 1.txt
			查找xxx行的内容
		范围查找(过滤)	:sed -n '/xxx/,/ccc/' 1.txt
			查找xxx到ccc所有行的内容
		混合查找(行号+过滤)	:sed -n '2,/xxx/' 1.txt
			查找第2行到包含xxx行的内容
		sed -nr /^$|#/!p' /etc/ssh/sshdconfig
			碰到空行或者#号的行不显示
	a	:在当前行后添加一行或多行
		sed '2axxx' 路径
			将xxx添加到第二行之后
	c	:用新的文件修改(替换)当前行
		sed '2cxxx' 路径
			将第2行替换为xxx
	i	:在当前行前一行插入文本
		sed '2ixxx' 路径
			注:i有三种使用方式。
	r	:在文件中读内容
		sed '2r 读的文件路径' 插入文件的路径
			即读出来的内容插入到指定行中,并打印出来
	w	:将指定行写入新的文件
		sed '2w 新的文件路径' 原文件路径
			获取原文件的第二行内容写入新文件中
	y	:将原字符转换成新字符
		sed '2y/原字符/新字符/' 文件路径
			将文件第二行中的某个字符替换为新的字符
	s	:将字符串转换成新字符串
		sed 's/11/22/' 文件路径
			将文本内的11整体替换为22(s前有定位)
			特性:
				每一行只替换一次,如要同一行替换多个,需要加g
	g	:全部执行
		应用于一整行
		echo 123_345_4534 |sed -r 's#(^.*)_(.*)_(.*$)#\3@\1@\2#g'
		echo 123_345_4534 |sed -r 's#(^[0-9]+)_([0-9]+)_([0-9]+$)#\3@\1@\2#g'
			替换并制定位置
		sed 's/11/22/g' 路径
		将文本内同一行多个需要替换的内容全部替换
		注:
			g是执行,没有替换功能,需要配合其他编辑模式
	i	:忽略大小写(需跟其他编辑模式一起使用)
	&	:代表前面匹配到的内容
		sed 's/.*/#&/g'
			将前面所有匹配到的内容相当于赋值给&。然后操作
匹配本机ip:
	ip addr show eth0
	简写
	ip a s eth0
	ip a s eth0 | sed -n '3p' | sed -r 's#.*t (.*)/24 brd (.*) s.*$#\1\n\2#g'
	ip a s eth0 | sed -rn '3s#.*t (.*)/24 brd (.*) s.*$#\1\n\2#gp'
文件尾部追加内容:
	1.cat>>文件路径<<'EOF'(如果追加的内容包含特殊符号,即可在EOF左右添加'')
		追加内容
		内容
		EOF(结束追加)
	2.sed -i '$a 一一一\n二二二\n三三三' 2.txt
	
	注:推荐1

3.案例

1.将nginx.conf中的注释行全部去掉
	sed '/^\ *#/d' /etc/nginx/nginx.conf
2.将nginx.conf中每一行之前增加注释
	sed 's/.*/#&/g'
3.要求一件修改本机的ip
	192.168.15.100——>192.168.15.101
	172.16.1.100——> 172.16.1.101

4,将/etc/passwd中的root修改成root
	sed -i 's/root/ROOT/g' /etc/

posted on 2021-12-21 16:57  邵邵。  阅读(66)  评论(0)    收藏  举报