sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区
中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容
送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
命令格式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
注:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才是非0
支持正则表达式
与grep一样,sed在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。正则表达式是
括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符。
使用基本元字符集 ^, $, ., *, [], [^], \< \>,\(\),\{\}
使用扩展元字符集 ?, +, { }, |, ( )
使用扩展元字符的方式:
sed -r
sed基本用法
先准备一个文件
head /etc/passwd |grep -n '' > mypasswd
cat mypasswd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
处理单个文件的命令格式
sed [options] '[匹配模式] sed 的内部命令' file1
处理多个文件的命令格式
sed [options] '[匹配模式] [sed 的内部命令]' file1 file2
把匹配模式和内部命令写在一个文件中的方式
sed [options] -f sedcommand.sed file
options 是可选的选择或参数
匹配模式 是可选的用于在文件中每一行进行匹配到模式,模式可以是正则,也可以是文件的行号
内部的命令也是可选的,没想到吧,但是两个单引号是必须的
注:
sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
只有当命令存在语法错误时,sed的退出状态才是非0
sed基本用法
打印
sed 默认会输出文件的每一行,无论这行内容是否能匹配上匹配模式,假如被匹配到的则会再输出一次。
sed -r '' mypasswd
sed -r 'p' mypasswd
屏蔽默认输出使用 -n 选项
sed -r -n 'p' mypasswd
sed -r -n '/root/p' mypasswd 显示root的行 ^ 匹配root 开头 ^root
搜索替换 -- 这是重点 实际中用的最多
sed会自动打印文件的每一行,查找模式匹配的行,找到后执行后面的命令,默认是输出(不加 -n)
搜索每一行,找到有 root 的,把第一个替换为 shark
sed -r 's/root/shark/' mypasswd
搜索每一行,找到有 root 的,进行全局替换
sed -r 's/root/shark/g' mypasswd
i 是同时忽略大小写
sed -r 's/root/shark/gi' mypasswd
找到含有 root 的进行删除
sed -r '/root/d' mypasswd
可以使用不同的符合作为界定符号
sed -r '#root#d' mypasswd
sed -r '' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
sed -r 'p' /passwd 显示2行 -r -p 动作2次 p print 打印
sed会自动打印文件的每一行,加-n则不会打印,只有显式使用打印命令p才会输出相应行