shell三剑客
grep(全局搜索打印)
grep --help -----查看grep帮助信息
grep -n -----显示所在的行号
[root@localhost ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
grep -c -----统计匹配到的行数
[root@localhost ~]# grep -c "root" /etc/passwd
2
grep -w -----精确匹配
[root@localhost ~]# grep -w "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
grep -E -----正则匹配
[root@localhost ~]# grep -E "root|nginx" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
grep -Eq -----静默模式,屏蔽输出
[root@localhost ~]# grep -Eq "root|nginx" /etc/passwd
[root@localhost ~]#
grep -i -----忽略大小写
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nginx:x:996:994:Nginx web server:/var/lib/nginx:/sbin/nologin
grep -v -----反向输出,取反
[root@localhost ~]# grep -Ev "root|nginx" /etc/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
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
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
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
logstash:x:997:995:logstash:/usr/share/logstash:/sbin/nologin
sed
流编辑器,主要用来过滤和替换文本内容,增删改查
p(print) -----打印(print)
[root@localhost ~]# sed -n '/root/p' /etc/passwd -----匹配打印root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
s -----替换字符串
g -----全局(global)
sed 's/root/ROOT/g' /tmp/passwd|grep "ROOT" -----将root替换为ROOT
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
operator:x:11:0:operator:/ROOT:/sbin/nologin
[root@localhost ~]# seq 10 > a.txt
[root@localhost ~]# cat a.txt
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# sed -n '1,2p' /root/a.txt -----显示第1-2行
1 2 3 4 5 6 7 8 9 10
k s a x z 3 w r s a
[root@localhost ~]# sed -n '2,+2p' /root/a.txt -----显示从第二行开始,往下再来2行
k s a x z 3 w r s a
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
打印奇数行(从1开始,2p是加2)
[root@localhost ~]# sed -n '1~2p' a.txt
1
3
5
7
9
打印偶数行(从1开始,2p是加2)
[root@localhost ~]# sed -n '2~2p' a.txt
2
4
6
8
10
d(delete) -----删除
删除第一行的内容
[root@localhost ~]# sed '1d' a.txt
2
3
4
5
6
7
8
9
10
删除1-3行的内容
[root@localhost ~]# sed '1,3d' a.txt
4
5
6
7
8
9
10
删除空行
sed '/^$/d' a.txt
a(append) -----在后面增加
[root@localhost ~]# sed '1a wu' a.txt -----在第1行后增加wu
1
wu
2
3
4
5
6
7
8
9
10
i(insert) -----在前面插入
[root@localhost ~]# sed '3i deng' a.txt -----在第3行前面插入deng
1
2
deng
3
4
5
6
7
8
9
10
^ -----以....开头
sed 's/^tom/jack/g' /tmp/passwd
$ -----以....结尾
sed 's/nologin$/jack/g' /tmp/passwd
& -----表示前面匹配到的字符
sed 's/nologin$/&_wudengtian/g' /tmp/passwd -----将nologin结尾的替换为wudengtian
c -----整行替换
[root@localhost ~]# sed '/root/chuazai007' /tmp/passwd -----匹配root行替换为huazai007
huazai007
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
w(write)-----将模式空间匹配的行,写入到指定文件
sed '/tom/w b.txt' /tmp/passwd -----将tom开头的行写入到b.txt文件中
[root@localhost ~]# cat b.txt -----查看文件
tom:x:1000:1000::/home/tom:/bin/bash
tom:x:1000:1000::/home/tom:/bin/bash
tom:x:1000:1000::/home/tom:/bin/bash
r(read) -----读取
[root@localhost ~]# sed '2r b.txt' /tmp/passwd -----将b.txt添加到/tmp/passwd的第二行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
tom:x:1000:1000::/home/tom:/bin/bash
tom:x:1000:1000::/home/tom:/bin/bash
tom:x:1000:1000::/home/tom:/bin/bash
awk
[root@localhost ~]# awk '/root/ {print}' /tmp/passwd 打印匹配root字段
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# awk -F ':' '/root/ {print $5}' /tmp/passwd -----打印第5个字段
root
operator
[root@localhost ~]# awk -F ':' '/root/ {print $NF}' /tmp/passwd -----打印最后一个字段
/bin/bash
/sbin/nologin
[root@localhost ~]# awk -F ':' '/root/ {print $(NF-1)}' /tmp/passwd ------打印倒数第二个字段
/root
/root
[root@localhost ~]# awk 'NR==2 {print}' /tmp/passwd -----打印第2行
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# awk 'NR>3 {print}' a.txt -----打印第3行以后的
4
5
6
7
8
9
10
[root@localhost ~]# awk -F ':' '/tom/{print toupper($1)}' /tmp/passwd -----将tom小写变大写
TOM
TOM
TOM
[root@localhost ~]# awk -F ':' '/tom/{print tolower($1)}' /tmp/passwd -----将tom大写变小写
tom
tom
tom