sed 是操作,过滤和转换文本内容的强大工具,sed可以从文件和管道中读取输入。
sed 命令语法
sed [ option ] {sed -commands} {input -file}
-e :执行多个sed命令
-n :只显示操作行
-i :修改目标文件内容
sed每次都从目标文件读取一行记录,并在该记录上执行sed -commands 命令 直到最后一行结束
p 打印命令
命令p 可以控制只输出你指定的内容 通常使用p时,还需要使用-n选项来屏蔽sed 的默认输出 ,否则当执行命令p时,每行记录会输出两次。
地址范围 可用~
如 n~m 表示从第 n 行开始,每次 跳过 m 行:
1~2 匹配 1,3,5,7,……
2~2 匹配 2,4,6,8,……
1~3 匹配 1,4,7,10,……
2~3 匹配 2,5,8,11,……
sed -n ‘p’ filename #打印所有行
sed -n ‘2p’ filename #打印第二行
sed -n ‘1,4p’ filename #打印1-4行
sed -n ‘2,$’ filename #打印
sed -n ‘2~3 p’ filename #打印2,5,8,11 等行
sed -n ‘/jam/p’ filename #打印匹配到jam的所有行
sed -n ‘/jam/,4 p’ filename #打印第一次匹配jam的行至第四行的内容
sed -n ‘/jam/,$ p’ filename #打印第一次匹配到jam的行到最后所有行
sed -n ‘/jam/,/wa/ p’ filename #打印匹配jam的行开始到jane的行之间的所有内容
**d 删除 命令 **
注意 :不加 i 参数 ,源文件内容不变。
sed ‘2d’ filename #删除第二行
sed ‘1,4d’ filename #删除1到4行
sed ‘2,$d’ filename #删除第二行到最后一行
sed ‘1~2 d’ filename #删除奇数行
sed ‘/amn/d’ filename #删除匹配amn 的行
sed ‘/amn/,4 d’ filen #删除匹配jason的行至第四行
sed ‘/ar/,$ d’ filename #删除第一次匹配到ar的行到最后一行
sed ‘/ar/,+2 d’ filename #删除第一次匹配到ar的行和紧跟它后面的两行
sed ‘/^$/d’ filename #删除空行
w 写入命令
命令w 可以把一个文件内容保存到另一个文件当中
sed ‘w 1.txt’ 2.txt #把2.txt的内容保存到1.txt 同时显示在屏幕上若1.txt 文件中有内容 ,则会覆盖
sed -n ‘w 1.txt’ 2.txt #同上功能 只是不再屏幕上显示
sed -n ‘2w 1.txt’ 2.txt #只保存第二行
sed -n ‘1,4w 1.txt’ 2.txt #只保存1到4行
sed -n ‘2,$w 1.txt’ 2.txt #保存第二行至最后一行
sed -n ‘1~2 w 1.txt’ 2.txt #保存奇数行
sed -n ‘/jame/w 1.txt’ 2.txt #保存匹配到jame的行
sed -n ‘/jasm/,4 w 1.txt’ 2.txt #保存第一次匹配jasm的行至第四行
sed -n ‘/sxd/,/ddd/ w 1.txt’ 2.txt #保存匹配sxd至匹配ddd 的行
**S 替换命令 **
sed ‘s/ddd/sxd/’ filename #用sxd替换文件中每行当中第一个ddd
sed ‘/ddd/s/sxd/vvv/’ filename #用vvv替换包含ddd中行中第一个sxd
**g 全局标记 **
sed ‘s/ddd/sxd/g’ filename #用sxd替换含有ddd的所有行中所有的ddd
**1 2 3 数字标记 **
sed ‘s/ddd/sxd/2’ filename #替换第二个ddd
p 打印标记
sed -n ‘s/sxd/ddd/p’ filename #打印替换后的行
sed -n ‘s/sxd/ddd/2 p’ filename #把每行中第二次出现sxd替换为ddd打印出来
w 写标记
sed -n 's/John/Johnny/w output.txt' employee.txt #将替换后的内容写到 outout。txt 中
i 忽略大小写
sed 's/john/Johnny/i' employee.txt #把 john 或 John 替换为 Johnny
&的作用
sed 's/^[0-9][0-9][0-9]/[&]/g' employee.txt #给雇员 ID(即第一列的 3 个数字)加上[ ],如 101 改成[101]
sed 's/^.*/<&>/' employee.txt #把每一行放进< >中
正则表达式
sed -n '/^103/ p' employee.tx #匹配103开头的行并打印
sed -n '/r$/ p' employee.txt #匹配r结尾的行并打印
匹配0到任意多次(*)
sed -n '/log: *./p' log.txt #匹配包含log并且log后面有信息的行
匹配1到多次 (\+)
sed -n '/log: \+/ p' log.txt #匹配log后面有一个或者多个空格的行
匹配0次或者1次 前面的字符
sed -n '/log: \?/ p' log.txt #匹配log后面没有空格或者有一个空格的行
转义字符 ( \ )
sed -n '/127\.0\.0\.1/ p' /etc/host #匹配含有127.0.0.1的行并打印
字符集 ( [0-9] )
sed -n ‘/[123]/ p' filename #匹配含有1或2或3的行 并打印
a 追加命令
sed '2 a 203 ' employee.txt #在第二行加入203
sed '$ a 203' employee.txt #在结尾加入203
sed ‘/sxd/ a 123’ filename #在匹配到sxd的行后加入123
i 插入命令
和追加命令a 用法一样,只是在前一行插入
c 修改命令
sed '2 c 202' employee.txt #用202替代第二行