grep命令
- grep [-cinvABC] 'word' filename
- -c行数
- -i不区分大小写
- -n显示行号
- -v取反
- -r遍历所有子目录
- -A后面跟数字,过滤出符合要求的行以及下面n行
- -B后面跟数字,过滤出符合要求的行以及上面n行
- -C后面跟数字,同时过滤出符合要求的行以及上下各n行
- -c行数
[root@localhost ~]# cp /etc/passwd test.txt
[root@localhost ~]# cat test.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
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:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# grep -c 'nologin' test.txt
15
- -n显示行号
[root@localhost ~]# grep -n 'nologin' test.txt
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
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
- -i不区分大小写
[root@localhost ~]# grep -i 'nologin' test.txt
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
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/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
- -v取反
[root@localhost ~]# grep -iv 'nologin' test.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
- -r遍历所有子目录
[root@localhost ~]# grep -r 'root' /etc/ > 2.txt
[root@localhost ~]# grep -r '/etc/passwd' 2.txt
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
- -A后面跟数字,过滤出符合要求的行以及下面n行
[root@localhost ~]# grep -nA2 'root' test.txt
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
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- -B后面跟数字,过滤出符合要求的行以及上面n行
[root@localhost ~]# grep -nB2 'root' test.txt
1:root:x:0:0:root:/root:/bin/bash
--
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
- -C后面跟数字,同时过滤出符合要求的行以及上下各n行
[root@localhost ~]# grep -nC2 'root' test.txt
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
--
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
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
grep/egrep示例
- grep -n '[0-9]' test1.txt 列出test1.txt中包含数字的行。
[root@localhost ~]# grep -n '[0-9]' test1.txt
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
- grep -vn '[0-9]' test1.txt 取反,列出test.txt中不带数字的行
[root@localhost ~]# grep -vn '[0-9]' test1.txt
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
11:#
12:# To view current default target, run:
13:# systemctl get-default
14:abcdefg
15:#
16:# To set a default target, run:
17:# systemctl set-default TARGET.target
18:#
- grep -nv '^#' test1.txt 列出test1.txt中不是以#号开头的
[root@localhost ~]# grep -nv '^#' test1.txt
14:abcdefg
- grep -n '^#' test1.txt 列出test1.txt中以#号开头的
[root@localhost ~]# grep -n '^#' test1.txt
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#
9:# multi-user.target: analogous to runlevel 3
10:# graphical.target: analogous to runlevel 5
11:#
12:# To view current default target, run:
13:# systemctl get-default
15:#
16:# To set a default target, run:
17:# systemctl set-default TARGET.target
18:#
- grep -v '^#' test1.txt |grep -v '^$'
[root@localhost ~]# grep -nv '^#' test1.txt |grep -v '^$'
9:$123456
16:abcdefg
- grep '^[^0-9]' test1.txt 表示列出以非数字的字符开头的
[root@localhost ~]# grep -n '^[^0-9]' test1.txt
1:# inittab is no longer used when using systemd.
2:#
3:# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
4:#
5:# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
6:#
7:# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
8:#abc123$
9:$123456
11:aaabbbccc
13:# multi-user.target: analogous to runlevel 3
14:# graphical.target: analogous to runlevel 5
15:#
16:# To view current default target, run:
17:# systemctl get-default
18:abcdefg
19:#
20:# To set a default target, run:
21:# systemctl set-default TARGET.target
22:#
- grep -nv '^[^0-9]' test1.txt 表示列出以数字的字符开头的,包括空白行。
[root@localhost ~]# grep -nv '^[^0-9]' test1.txt
10:123
12:
- grep "r..t" test1.txt 列出test1.txt中r和t之间两个字母的内容
[root@localhost ~]# grep "r..t" test1.txt
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# To set a default target, run:
# systemctl set-default TARGET.target
- grep "r.*t" test1.txt 匹配在r和t之间的任意字符
[root@localhost ~]# grep "r.*t" test1.txt
# inittab is no longer used when using systemd.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# To set a default target, run:
# systemctl set-default TARGET.target
- grep 'o\ {2\ }' text1.txt =egrep 'o{2}' test.txt
[root@localhost ~]# grep 'o\{2\}' test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@localhost ~]# egrep 'o{2}' test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- grep 'o\ {1,3\ }' test.txt = egrep 'o{1,3}' test.txt 表示test.txt文件中,字母o 出现的1次至3次的内容
[root@localhost ~]# grep 'o\{1,3\}' test.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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# egrep 'o{1,3}' test.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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
- grep -E 'root|nologin' test.txt 表示匹配root 或者nologin 的文件内容 = egrep'root|nologin' test.txt
[root@localhost ~]# grep -E 'root|nologin' test.txt
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
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/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# egrep 'root|nologin' test.txt
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
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/nologi
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sed 命令
主要是用来讲数据进行选取、替换、删除、新增的命令,如果不加-i选项是不会更改文件内容的,如果不确定的情况下,尽量不要更改系统中的配置文件。
- sed [选项] '[动作]' 文件名
选项
- -n :一般sed命令会把所有数据都输出到屏幕上,如果加上-n 则会把经过sed命令处理过的命令输出到屏幕上。
- -e: 允许对输入数据应用多条sed命令编辑
- -i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作
- a:追加,在当前行后添加一行或多行
- c:行替换,用c后面的字符串替换原数据行
- i:插入,在当前行插入一行或者多行
- d:删除,删除指定的行
- p:打印,输出指定的行
- s:字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g"
-n :一般sed命令会把所有数据都输出到屏幕上,如果加上-n 则会把经过sed命令处理过的命令输出到屏幕上。
[root@localhost ~]# sed -n '/adm/'p test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
- p打印1.txt 文件中的第二行
[root@localhost ~]# cat 1.txt
aaa
bbb
ccc
111
222
333
[root@localhost ~]# sed -n '2'p 1.txt
bbb
- sed '2a hello word' 1.txt 在文件1.txt中第二行后面添加一行内容 hello word
[root@localhost ~]# sed '2a hello word' 1.txt
aaa
bbb
hello word
ccc
111
222
333
- sed '2i hello word' 1.txt 在文件1.txt中第二行前面添加一行内容 hello word
[root@localhost ~]# sed '2i hello word' 1.txt
aaa
hello word
bbb
ccc
111
222
333
- sed '2d' 1.txt 删除1.txt文件内容中的第二行
[root@localhost ~]# sed '2d' 1.txt
aaa
ccc
111
222
333
- sed '4c 444' 1.txt 将1.txt 文件内容中的第四行替换为 444
[root@localhost ~]# sed '4c 444' 1.txt
aaa
bbb
ccc
444
222
333
- sed '1s/aaa/a1a/g' 1.txt 将第一行的aaa更改为a1a
[root@localhost ~]# sed '1s/aaa/a1a/g' 1.txt
a1a
bbb
ccc
111
222
333
- sed -i '1s/aaa/a1a/g' 1.txt 更改文件的内容并不输出
[root@localhost ~]# sed -i '1s/aaa/a1a/g' 1.txt
[root@localhost ~]# cat 1.txt
a1a
bbb
ccc
111
222
333
- [root@localhost ~]# sed -e '1c 111' -e '2c 222' 1.txt 使用-e命令执行多条sed命令。将第一行更改为111,第二行更改为222
[root@localhost ~]# sed -e '1c 111' -e '2c 222' 1.txt
111
222
ccc
111
222
333
awk 命令
- awk '条件1{动作1}条件2{动作2}...' 文件名
条件
- 一般使用关系表达式作为条件
- x > 10 判断变量 x是否大于10
- x>=10 大于等于
- x<=10 小于等于
动作
- 格式化输出
- 流程控制语句
关系式:BEGIN END
内置变量:FS
- 使用关系式列出符合条件的文件内容
cat test.txt |grep "/bin/bash" | awk 'BEGIN{FS=":"}{print $1"\t" $3}'列出test.txt文件内容的/bin/bash中的以冒号分隔的第一列和第三列
[root@localhost ~]# cat test.txt |grep "/bin/bash" | awk 'BEGIN{FS=":"}{print $1"\t" $3}'
root 0
user1 1000
user2 1001
提取磁盘跟文件下的磁盘使用百分比的数字
[root@localhost ~]# df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f 1
6
在文件1.txt内容 第二列前面添加一行 “hello word!”
[root@localhost ~]# cat 1.txt
aaa 111
bbb 222
ccc 333
111 aaa
222 bbb
333 ccc
[root@localhost ~]# awk 'BEGIN{print "hello word!"}{print $2}' 1.txt
hello word!
111
222
333
aaa
bbb
ccc
在文件1.txt内容 第一列后面添加一行 “hello word!”
[root@localhost ~]# cat 1.txt
aaa 111
bbb 222
ccc 333
111 aaa
222 bbb
333 ccc
[root@localhost ~]# awk 'END{print "hello word!"} {print $1}' 1.txt
aaa
bbb
ccc
111
222
333
hello word!
列出 test.txt文件中以冒号为分隔符并且第三列的数值大于等于1000,并打印出来第一列和第三列
[root@localhost ~]# awk '{FS=":"} $3>=1000{print $1 "\t" $3}' test.txt
user1 1000
user2 1001