一、sed
sed是用来编辑文本文件的命令
1、格式
sed [参数]... [执行命令] [输入文件]...
2、参数
-n:安静模式,只打印受影响的行,默认打印输入数据的所有内容
-e:用于在脚本中添加多个执行命令一次执行,在命令行中执行多个命令通常不需要添加该命令
-f filename:指定执行filename中的命令
-r:使用扩展正则表达式,默认为标准正则表达式
-i:将直接修改输入文件内容,而不是打印到标准输出设备
3、执行命令格式
[n1][,n2]command
[n1][~step]command
其中一些命令可以在后面加上作用范围:
sed -i 's/sad/happy/g' test # g表示全局范围
sed -i 's/sad/happy/4' test # 4表示指定行中的第四个匹配字符串
其中 n1,n2 表示输入内容的行号,它们之间为,
逗号则表示从 n1 到 n2 行,如果为~
波浪号则表示从 n1 开始以 step 为步进的所有行;command 为执行动作
4、command动作指令
s:行内替换
c:整行替换
a:插入到指定行的后面
i:插入到指定行的前面
p:打印指定行,通常跟-n来使用
d:删除指定行
案例1:插入(a/i)
sed '2a123' 1.txt 将1.txt文件中的第2行后面加一行123
sed '1,3a123' 1.txt 将1.txt文件中的第1行到第3行后面都加一行123
sed '2i123' 1.txt 将1.txt文件中的第2行前面加一行123
sed '1,3i123' 1.txt 将1.txt文件中的1到3行前面都加一行123
案例2:整行替换(c)
sed '2c123' 1.txt 将1.txt中的第二行替换为123
sed '1,3c123' 1.txt 将1.txt中将1到3行都替换成123
案例3:条件替换(s)
sed 's/123/456/' 1.txt 第所有行中的第一个123替换为456
sed '1s/123/456/' 1.txt 将第1行中的第一个123替换为456
sed '1s/123/456/g' 1.txt 将第1行中的所有123都替换为456
sed 's/abc/xyz/gi' 1.txt 将1.txt中所有的abc都替换成xyz,i表示不区分大小写
sed '1,3s/abc/xyz/gi' 1.txt 将1.txt中的第1行到第3行的abc都替换为xyz
案例3:删除(d)
sed '2d' 1.txt 将1.txt中的第2行删除
sed '1,2d' 1.txt 将1.txt中的第1行和第2行都删掉
案例4:打印(p)
sed '2p' 1.txt 重复打印1.txt中的第2行
sed '1,3p' 1.txt 重复打印1.txt中1到3行
sed -n '2p' 1.txt 只打印1.txt中的第2行
sed -n '1,3p' 1.txt 只打印1.txt中1到3行
sed -n '/abc/p' 1.txt 打印1.txt中包含abc的行,跟grep类似
sed -n '/abc/!p' 1.txt 打印1.txt中不包含abc的行,跟grep -v类似
sed -n 's/abc/xyz/gp' 1.txt 只打印1.txt中匹配替换的行