1.正则表达式 (RE)
什么是正则表达式?
定义:字符,特殊的字符,赋予了一些特殊的含义,主要应用于grep ,sed,awk命令。
正则表达式能干什么
用途: 使用正则表达式可以筛选我们想要的内容。
正则表达式注意事项:
1.正则表达式和通配符,特殊字符有本质区别: 正则表达式主要用于三剑客命令,而通配符和特殊字符适用于所有的命令。
2.正则神坑:注意区别中文符号,必须使用英文的符号,否则会报错。
2.常见通配符和特殊符号
. #当前目录
.. #当前目录的上一级目录
- #当前目录上一次所在的目录
~ #当前用户的家目录
# #注释,root用户的命令提示符
$ #引用变量 数组 普通用户的命令行提示符
! #非,取反
& #将当前的命令放在后台执行
&& #前面的命令执行成功才会执行后面的命令
|| #前面的命令执行失败才会执行后面的命令
| #管道 将前面命令的执行结果以标准输入的方式交给管道后面的命令,前提是必须是正确的执行结果
\ #转义 取消特殊字符的含义,换行符 将一条较长的命令分割为多行
$() #优先执行括号里的命令,将执行的结果输出给外面的命令
`` #优先执行括号里的命令,将执行的结果输出给外面的命令
* #表示所有 任意
? #匹配任意一个字符且只能是一个
[] #匹配中括号中任意一个字符,
[^] #排除中括号中任意一个字符
{} #生成序列 看成一个整体
'' #强引用
"" #弱引用
> #标准输出重定向 < 标准输入重定向 >> 标准输入追加重定向
; #命令的分割符
3.正则表达式符号
^ #以什么开头
$ #以什么结尾
^$ #空行
. #任意一个字符,不包含换行符
* #表示前面的字符出现0次或者0次以上
.* #表示所有
\ #转义符,取消特殊字符的特殊含义
[] #匹配中括号中任意一个字符
[^] #排除中括号中任意一个字符 只是颜色上进行排除,显示内容上没有变化
扩展正则 #扩展正则必须加上对应的选项才能用,普通的正则都能用。 例如grep 必须加-E sed 必须加-r
+ #表示前面的字符出现1次或者1次以上
? #匹配前面的字符出现0次或者1次
| #或者
() #创建一个用户匹配的字符串,方便后续引用,视为一个整体
{n} #n是数字,匹配前面的字符出现n次
{n,} #匹配前面的字符出现至少n次,最大没有上限
{,n} #匹配前面的字符出现至多n次,最少0次
{n,m} #匹配前面的字符出现至少n次,最多m次
特殊符号
[[:upper:]] #所有大写字母
[[:lower:]] #所有小写字母
[[:alpha:]] #所有字母
[[:digit:]] #所有数字
[[:alnum:]] #所有数字和字母
[[:space:]] #空白字符
[[:punct:]] #所有特殊字符,标点符号
5.正则表达式之grep
擅长过滤,并给过滤出来的内容加上颜色
常用选项:
-i #忽略大小写
-n #给过滤出来的内容加上行号
-A #向下过滤多少行
-B #向上过滤多少行
-C #向上向下过滤多少行
-c #统计过滤出来的行数
-w #精确匹配
-o #只显示过滤的内容
-v #排除
-E #支持扩展正则
-R/r #递归过滤
#过滤以什么开头的行
[root@shell /service/scripts/day12]# grep "^root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
#过滤以什么结尾的行
[root@shell /service/scripts/day12]# grep "halt$" /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
#过滤空行
[root@shell /service/scripts/day12]# grep -n "^$" passwd
2:
6:
12:
#过滤含空格和tab键的所有空行
[root@shell /service/scripts/day12]# grep -n "^[ \t]*$" passwd
2:
6:
8:
10:
12:
15:
#过滤含空格和tab键的所有空行
[root@shell /service/scripts/day12]# grep -n "^[[:space:]]*$" passwd
2:
6:
8:
10:
12:
15:
#排除空行
[root@shell /service/scripts/day12]# grep -v "^[ \t]*$" 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
#过滤任意一个字符的行,不包括空行 (空格和tab键也是字符)
[root@shell /service/scripts/day12]# grep "." passwd
root:x:0:0:root:/root:/bin/bash
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
#过滤任意一个字符的行 ,包括空行
[root@shell /service/scripts/day12]# grep ".*" 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
games:x:12:100:games:/usr/games:/sbin/nologin
#过滤以点为结尾的行
[root@shell /service/scripts/day12]# grep ".$" passwd #这是过滤了所有
root:x:0:0:root:/root:/bin/bash
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
test.
[root@shell /service/scripts/day12]# grep "\.$" passwd 这才是过滤以.结尾的行
test.
#中括号用法
#过滤以a和b开头的行
[root@shell /service/scripts/day12]# grep "^[ab]" passwd
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
#过滤不以a和b开头的行 ,显示不了空行
[root@shell /service/scripts/day12]# grep "^[^ab]" passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#过滤不以a和b开头的行 ,可以显示空行
[root@shell /service/scripts/day12]# grep -v "^[ab]" passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/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
#过滤0-9的数字(只是数字高亮显示)
[root@shell /service/scripts/day12]# grep "[0-9]" 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
#只过滤出数字
[root@shell /service/scripts/day12]# grep -o "[0-9]" passwd
0
0
1
1
2
#只过滤小写字母
[root@shell /service/scripts/day12]# grep -o "[a-z]" passwd
r
o
o
t
x
#只过滤大写字母
[root@shell /service/scripts/day12]# grep -o "[A-Z]" passwd
F
T
P
U
N
#过滤字母不区分大小写
[root@shell /service/scripts/day12]# grep -o "[A-Z]" passwd
i
n
t
p
T
P
U
#过滤所有特殊符号 (特殊符号会高亮显示)
[root@shell /service/scripts/day12]# grep "[[:punct:]]" 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
#只过滤特殊符号
[root@shell /service/scripts/day12]# grep -o "[[:punct:]]" passwd
:
:
:
:
:
/
#统计文件中所有字母出现的次数
[root@shell /service/scripts/day12]# grep -o "[a-Z]" passwd|sort|uniq -c|sort -rn
102 n
83 o
74 s
74 i
50 b
44 l
44 e
42 a
41 t
#统计文件中所有单词出现的次数
[root@shell /service/scripts/day12]# grep -Eo "[a-Z]+" passwd|sort |uniq -c|sort -rn #必须加E,因为+是扩展正则
27 sbin
26 x
21 nologin
10 var
6 bin
4 root
4 lib
3 User
3 sync
3 spool
[root@shell /service/scripts/day12]# grep -Eo "[a-Z]*" passwd|sort |uniq -c |sort -rn 结果与上一条命令一样,但是含义还是有区别,*可以过滤出空行,只是这里的-o选项排除了空行。建议用上一种。
27 sbin
26 x
21 nologin
10 var
6 bin
4 root
4 lib
3 User
3 sync
3 spool
# *和+的区别
#过滤a出现1次或者1次以上的行
[root@shell /service/scripts/day12]# grep -E "a+" passwd
root:x:0:0:root:/root:/bin/bash
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
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
#过滤a出现0次或者0次以上的行 这种会过滤出空行
[root@shell /service/scripts/day12]# grep "a*" 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
#过滤出前面字符出现0次或者0次以上
[root@shell /service/scripts/day12]# grep -o "o*" passwd 这里o只过滤了一次
oo
oo
oo
o
o
o
#过滤出前面字符出现0次或者1次
[root@shell /service/scripts/day12]# grep -Eo "o?" passwd 这里o过滤了两次
o
o
o
o
#或者 |
[root@shell /service/scripts/day12]# grep -E "mail|halt" /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
[root@shell /service/scripts/day12]# grep -E "(mail|halt|sync)" /etc/passwd ()小括号表示为一组,一个整体
sync:x:5:0:sync:/sbin:/bin/sync
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#匹配字符固定出现多少次
[root@shell /service/scripts/day12]# grep -E "[0-9]{2}" /etc/passwd 这种过滤方式包含2次以上的情况
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
www:x:1000:1000::/home/www:/bin/bash
nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
ddd1:x:1001:1001::/home/ddd1:/bin/bash
[root@shell /service/scripts/day12]# grep -Ew "[0-9]{2}" /etc/passwd 加上w就可以精确匹配
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@shell /service/scripts/day12]# grep -E "[0-9]{2,3}" /etc/passwd 至少2次最多3次
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@shell /service/scripts/day12]# grep -E "[0-9]{4,}" /etc/passwd 最少4次
www:x:1000:1000::/home/www:/bin/bash
ddd1:x:1001:1001::/home/ddd1:/bin/bash
ddd2:x:1002:1002::/home/ddd2:/bin/bash
ddd3:x:1003:1003::/home/ddd3:/bin/bash
[root@shell /service/scripts/day12]# grep -E "[0-9]{,2}" /etc/passwd 最多出现2次,这种情况会把所有的都筛选出来,因为最少出现0次就是没有出现的也会算上。
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
#取出有效的身份证号码
[root@shell /service/scripts/day12]# cat shenfen.txt
acd 234545454434567543
acd 234575454434567543
acd 23454545443456754X
acd 134545454434567543
acd 33454545443457543
acd 434545454434567543
acd 534545454434X6754X
acd 6345454544345675432
acd 7345454544345675434
[root@shell /service/scripts/day12]# grep -Ew "[0-9]{17}[0-9X]{1}" shenfen.txt 取身份证号
acd 234545454434567543
acd 234575454434567543
acd 23454545443456754X
acd 134545454434567543
acd 434545454434567543
6.正则表达式之sed
sed 流编辑器 非交互式的编辑器 按行进行处理 模式空间 临时缓冲区
命令格式:
sed [option] 'command' files
常用选项:
-n #取消默认输出
-i #修改文件内容
-r #支持扩展正则使用
-e #允许多项编辑
! #非,取反
命令参数:
p #打印
d #删除
s #替换
g #全局
a #追加
i #插入
c #替换,在当前行替换
w #将匹配到的内容写入到指定的文件中
i #忽略大小写
#允许多项编辑
[root@qls /service/scripts/day13]# sed -e '1,10d' -e 's#bash#python#g' passwd
[root@qls /service/scripts/day13]# sed '1,10d' passwd | sed 's#bash#python#g'
#打印 p
[root@qls /service/scripts/day13]# sed -n '1p' passwd
root:x:0:0:root:/root:/bin/bash
[root@qls /service/scripts/day13]# sed -n '1,3p' 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
[root@qls /service/scripts/day13]# sed -n '1p;3p' passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls /service/scripts/day13]# sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls /service/scripts/day13]# sed -n '/root/p;/halt/p' passwd
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls /service/scripts/day13]# sed -nr '/root|halt/p' passwd
root:x:0:0:root:/root:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
operator:x:11:0:operator:/root:/sbin/nologin
#删除 d
[root@qls /service/scripts/day13]# sed '1d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '1,20d' passwd
polkitd:x:99%9:998:User for polkitd:/:/sbin/nologin
[root@qls /service/scripts/day13]# sed '1d;3d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@qls /service/scripts/day13]# sed '/root/d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls /service/scripts/day13]# sed -r '/root|halt/d' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#替换 全局 忽略大小写 s g i
#替换每一行中的第一个满足条件的
[root@qls /service/scripts/day13]# sed 's#root#admin#' passwd
admin: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:/admin:/sbin/nologin
#替换每一行以root开头的root
[root@qls /service/scripts/day13]# sed 's#^root#admin#' passwd
admin: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
#全局替换
[root@qls /service/scripts/day13]# sed 's#root#admin#g' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
#替换以root开头的行
[root@qls /service/scripts/day13]# sed '/^root/s#root#admin#g' passwd
admin:x:0:0:admin:/admin:/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
#替换单行
[root@qls /service/scripts/day13]# sed '1s#root#admin#g' passwd
admin:x:0:0:admin:/admin:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#替换多行
[root@qls /service/scripts/day13]# sed '1,5s#x#X#g' 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
[root@qls /service/scripts/day13]# sed 's#root#admin#g' passwd
admin:x:0:0:ROOT:/admin:/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:/admin:/sbin/nologin
#替换的时候忽略大小写
[root@qls /service/scripts/day13]# sed 's#root#admin#gi' passwd
admin:x:0:0:admin:/admin:/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:/admin:/sbin/nologin
#追加 a
[root@qls /service/scripts/day13]# sed '1aqls' passwd
root:x:0:0:ROOT:/root:/bin/bash
qls
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '$aqls' 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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
qls
#追加多行内容
[root@qls /service/scripts/day13]# sed '1aqls\nqiudao' passwd
root:x:0:0:ROOT:/root:/bin/bash
qls
qiudao
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '1s#^#qls\n#g' passwd
qls
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls /service/scripts/day13]# sed 's#^#\##g' 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
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
#nobody:x:99:99:Nobody:/:/sbin/nologin
#systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
#dbus:x:81:81:System message bus:/:/sbin/nologin
#polkitd:x:999:998:User for polkitd:/:/sbin/nologin
#tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
#abrt:x:173:173::/etc/abrt:/sbin/nologin
#sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@qls /service/scripts/day13]# sed 's#$#\##g' 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#
games:x:12:100:games:/usr/games:/sbin/nologin#
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin#
nobody:x:99:99:Nobody:/:/sbin/nologin#
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin#
dbus:x:81:81:System message bus:/:/sbin/nologin#
polkitd:x:999:998:User for polkitd:/:/sbin/nologin#
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin#
abrt:x:173:173::/etc/abrt:/sbin/nologin#
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin#
postfix:x:89:89::/var/spool/postfix:/sbin/nologin#
#插入 i
[root@qls /service/scripts/day13]# sed '1iqls' passwd
qls
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '1iqls\nqiudao' passwd
qls
qiudao
root:x:0:0:ROOT:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '$s#$#\nqls#g' 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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
qls
#替换,在当前行替换 c 会删除匹配的行,同时在当前行插入内容
[root@qls /service/scripts/day13]# sed '1c qls' passwd
qls
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls /service/scripts/day13]# sed '/^root/c qls' passwd
qls
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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
qls
#将匹配到的内容写入到指定的文件中 w 重定向
[root@qls /service/scripts/day13]# sed -n '/root/wnew.txt' passwd
[root@qls /service/scripts/day13]# cat new.txt
root:x:0:0:ROOT:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@qls /service/scripts/day13]# sed -n '1wnew1.txt' passwd
[root@qls /service/scripts/day13]# cat new1.txt
root:x:0:0:ROOT:/root:/bin/bash
[root@qls /service/scripts/day13]# sed -n '1,10wnew2.txt' passwd
[root@qls /service/scripts/day13]# cat new2.txt
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
#取反 !
[root@qls /service/scripts/day13]# sed -n '1!p' passwd
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
[root@qls /service/scripts/day13]# sed '1!d' passwd
root:x:0:0:ROOT:/root:/bin/bash
#获取行号 =
[root@qls /service/scripts/day13]# sed = passwd
1
root:x:0:0:ROOT:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
#后向引用
[root@qls /service/scripts/day13]# sed -r 's#(.*)(:x.*:)(.*)#\3\2\1#g' passwd
/bin/bash:x:0:0:ROOT:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
#取IP地址
#排除内容 删除
#排除空行
[root@qls /service/scripts/day13]# sed '/^$/d' passwd #删除没有空格和tab键的空行
#排除用空格和tab键的空行
[root@qls /service/scripts/day13]# sed '/^[ \t]*$/d' passwd
[root@qls /service/scripts/day13]# sed '/^[[:space:]]*$/d' passwd
[root@qls /service/scripts/day13]# sed '/^\s*$/d' passwd
#删除开头带有空格和tab键的注释行
[root@qls /service/scripts/day13]# sed '/^[ \t]*#/d' /etc/nginx/conf.d/default.conf
#删除开头带有空格和tab键的注释行或者空行
[root@qls /service/scripts/day13]# sed -r '/^[ \t]*($|#)/d' /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
[root@qls /service/scripts/day13]# sed '/^[ \t]*$/d;/^[ \t]*#/d' /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
[root@qls /service/scripts/day13]# sed -r '/^[ \t]*$|^[ \t]*#/d' /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
#给文件内容加上注释
[root@qls /service/scripts/day13]# sed -i 's/^/#/g' passwd
#删除以#开头的行
[root@qls /service/scripts/day13]# sed '/^#/d' passwd
#添加注释 有空格或者tab或者#开头的行加上注释
[root@qls /service/scripts/day13]# sed 's/^[ \t#]*/#/' 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
[root@qls /service/scripts/day13]# sed 's/^[ \t]*#*/#/' passwd
[root@qls /service/scripts/day13]# sed '1,10s/^[ \t]*#*/#/' 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