流编辑器 sed

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区
中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容
送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

123.png

命令格式

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才会输出相应行

你可能感兴趣的:(流编辑器 sed)