三剑客 -n选项 -i选项 -v选项 -w -c选项 -A -B选项 -C选项 空行 .* 表示所有的意思 {n,m} 匹配其前面的字符至少n次,至多m次 清理nginx配置文件 取反,删除。 删除单行 删除连续的多行 删除不连续的多行 排除 增 改 取行 过滤 取列 取反 取ip地址 计算

三剑客(四个文本处理工具)
Awk、Sed、Grep、Find。



Grep  文本过滤,会给过滤出来的内容加上颜色。

centos6需要自己设置别名,centos7不需要

选项:
	-n		#给过滤出来的内容加上当前内容所在的行号。
	-v		#取反,排除
	-E		#支持扩展正则使用
	-i		#忽略大小写
	-o		#只显示匹配的内容
	-w		#只匹配关键字(一整串的字符串)
	-c 		#统计过滤出来的内容行数
	-A 		#显示匹配内容的向下的行数
	-B		#向上匹配
	-C		#上下匹配
	-r		#递归过滤
	-R		#递归过滤 
	
[root@oldboyedu ~]# grep -n 'root'  passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

-i选项

[root@oldboyedu ~]# echo  Root  >> passwd
[root@oldboyedu ~]# grep 'root'  passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# grep -i 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Root

-v选项

[root@oldboyedu ~]# grep -v  '/sbin/nologin' passwd
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
Root

-w

[root@oldboyedu ~]# echo roott >>passwd
[root@oldboyedu ~]# grep  'root'  passwd |wc -l
3
[root@oldboyedu ~]# grep  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roott
[root@oldboyedu ~]# grep -w 'root'  passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

-c选项

[root@oldboyedu ~]# grep -c 'root' passwd 
3
[root@oldboyedu ~]# grep -c 'root' passwd |wc -l
1
[root@oldboyedu ~]# grep  'root' passwd |wc -l
3
[root@oldboyedu ~]# grep -c '.' passwd 
38
[root@oldboyedu ~]# wc -l passwd
38 passwd
	
[root@oldboyedu ~]# grep -R 'root'  ./
./.bash_history:cd /root/nginx-1.16.0
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:mv /root/nginx-1.16.0-1.x86_64.rpm  .
./.bash_history:top -d 1 -u root
./.bash_history:pgrep -u root
./.bash_history:pgrep -u -l root
./.bash_history:pgrep -l -u root
./.bash_history:top -d 1 -u root
./.bash_history:wget [root@oldboyedu ~]# kill 9461
./.bash_history:mkpasswd -l 20 |passwd --stdin root
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/specs.4.8 matches
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/latest_specs.4.8 matches
Binary file ./.file2.swp matches
Binary file ./sysstat-11.7.3-1.x86_64.rpm matches
./1111/test.txt:root:x:0:0:root:/root:/bin/bash
./1111/test.txt:operator:x:11:0:operator:/root:/sbin/nologin
./1111/test.txt:roott
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
[root@oldboyedu ~]# grep -r 'root'  ./
./.bash_history:cd /root/nginx-1.16.0
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d 'pcre-devel,openssl-devel,zlib-devel' --post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:mv /root/nginx-1.16.0-1.x86_64.rpm  .
./.bash_history:top -d 1 -u root
./.bash_history:pgrep -u root
./.bash_history:pgrep -u -l root
./.bash_history:pgrep -l -u root
./.bash_history:top -d 1 -u root
./.bash_history:wget [root@oldboyedu ~]# kill 9461
./.bash_history:mkpasswd -l 20 |passwd --stdin root
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/specs.4.8 matches
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/latest_specs.4.8 matches
Binary file ./.file2.swp matches
Binary file ./sysstat-11.7.3-1.x86_64.rpm matches
./1111/test.txt:root:x:0:0:root:/root:/bin/bash
./1111/test.txt:operator:x:11:0:operator:/root:/sbin/nologin
./1111/test.txt:roott
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
	

-A

[root@oldboyedu ~]# grep -n '.' passwd 
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
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21:nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
22:redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
23:ntp:x:38:38::/etc/ntp:/sbin/nologin
24:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
25:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
26:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
27:oldgirl1:x:1010:1010::/home/oldgirl1:/sbin/nologin
28:oldgirl2:x:1011:1011::/home/oldgirl2:/sbin/nologin
29:oldgirl3:x:1012:1012::/home/oldgirl3:/sbin/nologin
30:oldgirl4:x:1013:1013::/home/oldgirl4:/sbin/nologin
31:oldgirl5:x:1014:1014::/home/oldgirl5:/sbin/nologin
32:oldgirl6:x:1015:1015::/home/oldgirl6:/sbin/nologin
33:oldgirl7:x:1016:1016::/home/oldgirl7:/sbin/nologin
34:oldgirl8:x:1017:1017::/home/oldgirl8:/sbin/nologin
35:oldgirl9:x:1018:1018::/home/oldgirl9:/sbin/nologin
36:oldgirl10:x:1019:1019::/home/oldgirl10:/sbin/nologin
37:Root
38:roott
[root@oldboyedu ~]# grep -n '.' passwd |grep  -w '11'
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
[root@oldboyedu ~]# grep -n '.' passwd |grep  -w '^11'
11:games:x:12:100:games:/usr/games:/sbin/nologin
[root@oldboyedu ~]# grep -n '.' passwd |grep  -wA9  '^11'
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
	
	

-B选项

[root@oldboyedu ~]# grep -n '.' passwd  |grep -w '^20'
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep -n '.' passwd  |grep -wB 9  '^20' 
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin


-C选项

##### [root@oldboyedu ~]# grep  -n '.' passwd  |grep -Ew '^15|16'

15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
[root@oldboyedu ~]# grep  -n '.' passwd  |grep -Ew '^15|^16'
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
[root@oldboyedu ~]# grep  -n '.' passwd  |grep -EwC4  '^15|^16'
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep  -n '.' passwd  |grep -EwC4  '^1[56]'
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep  -n '.' /etc/passwd  |grep -EwC4  '^1[56]'
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:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

正则:

^

[root@oldboyedu ~]# grep '^root' passwd 
root:x:0:0:root:/root:/bin/bash
roott
[root@oldboyedu ~]# grep '^r' passwd 
root:x:0:0:root:/root:/bin/bash
redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
roott

$

[root@oldboyedu ~]# grep  'h$' passwd 
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# grep  'bash$' passwd 
root:x:0:0:root:/root:/bin/bash

空行

[root@oldboyedu ~]# grep -v '^$' passwd
#里面空格和tab键
[root@oldboyedu ~]# grep -v '^s*$' passwd

[root@oldboyedu ~]# grep -n '^s*$' passwd 

#.点匹配任意一个字符
[root@oldboyedu ~]# grep '.' test.log 
123
[root@oldboyedu ~]# grep -o '.' test.log 
1
2
3

#环境准备
cat>oldboy.txt<<EOF
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF

转义,取消特殊字符的特殊含义。

#只过滤以点为结尾的行
[root@oldboyedu ~]# grep  '.$'  oldboy.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep  '.$'  oldboy.txt 
I teach linux.
not 4900000448.

#以m或者n开头的行

[] 表示多个字符串,会单个匹配[]里面的内容,[] [^] 的区别

| 或者

[root@oldboyedu ~]# grep '^[mn]'  oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY
[root@oldboyedu ~]# grep '^m|^n' oldboy.txt -E
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu ~]# grep -v '^[mn]'  oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our size is http://blog.oldboyedu.com
[root@oldboyedu ~]# grep '^[^mn]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our size is http://blog.oldboyedu.com
[root@oldboyedu ~]# grep '[^mn]' oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

*前面一个字符出现0次或0次以上

[root@oldboyedu ~]# grep -o '0' oldboy.txt 
0
0
0
0
0
0
0
0
[root@oldboyedu ~]# grep -o '0*' oldboy.txt 
000
00000

.* 表示所有的意思

[root@oldboyedu ~]# grep -o  '.*' oldboy.txt 
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

cat>id.txt<<EOF
汤 610702199107053598
邹 371481199403259478
莫 52020319810613433X
韩 460106199111137270
荣 530124197504135438
荣 oldboy
荣 babygirl
荣 530124197504135438
阮 360702197902169951
翁 331002198504132813
任 6212231987082X5176
姜 370602198507189574
李A BBBCCC98507189574
赵B BBB602198507189574
霍 320904198403048179
EOF

{n,m} 匹配其前面的字符至少n次,至多m次

[root@oldboyedu ~]# grep -E   '[0-9]{17}[0-9X]{1}' id.txt 
汤 610702199107053598
邹 371481199403259478
莫 52020319810613433X
韩 460106199111137270
荣 530124197504135438
荣 530124197504135438
阮 360702197902169951
翁 331002198504132813
姜 370602198507189574
霍 320904198403048179
[root@oldboyedu ~]# grep -E  -o  '[0-9]{17}[0-9X]{1}' id.txt 
610702199107053598
371481199403259478
52020319810613433X
460106199111137270
530124197504135438
530124197504135438
360702197902169951
331002198504132813
370602198507189574
320904198403048179

清理nginx配置文件

[root@oldboyedu ~]# grep -Ev  '^s*$|#' /etc/nginx/nginx.conf.default  >nginx.conf
[root@oldboyedu ~]# cat nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

#查看配置文件
[root@oldboyedu ~]# grep '^[a-Z]'  /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile	.ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

[root@oldboyedu ~]# grep -Ev '^$|^#' /etc/ssh/sshd_config
Sed 替换,取行。增删改查
选项:
		-n 		#取消默认输出,p
		-i 		#替换 
		-i.bak	#先备份,在替换
		-r 		#支持扩展正则使用 
		s		#替换 
		g 		#全局
		d 		#删除
		p 	 	#打印
		!		#取反 
		a 		#追加
		i 		#插入
		$		#结尾的行
#取行。
#取单行
[root@oldboyedu ~]# sed  -n  '3p' passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
#取连续的多行
[root@oldboyedu ~]# sed -n '5,10p' passwd
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@oldboyedu ~]# sed -n '5p;10p' passwd
sync:x:5:0:sync:/sbin:/bin/sync
games:x:12:100:games:/usr/games:/sbin/nologin
	

取反,删除。

删除单行

[root@oldboyedu ~]# sed  '2d'  passwd 

删除连续的多行

[root@oldboyedu ~]# sed '2,10d' passwd

删除不连续的多行

[root@oldboyedu ~]# sed '2d;10d' passwd

排除

p' passwd

#环境准备 
cat >sed.txt<<"EOF"
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
EOF

#过滤字符串
[root@oldboyedu ~]# sed -n  '/yy/p'  sed.txt
104,$yy,CFO

#过滤多个
[root@oldboyedu ~]# sed -n '/oldboy/p ; /yy/p' sed.txt
101,$oldboy,CEO
104,$yy,CF
[root@oldboyedu ~]# sed -nr '/oldboy|yy/p'  sed.txt
101,$oldboy,CEO
104,$yy,CFO

[root@oldboyedu ~]# sed -n '/oldboy/p;/yy/p' sed.txt
101,$oldboy,CEO
104,$yy,CFO

#过滤多个连续的字符串
[root@oldboyedu ~]# sed -n '/oldboy/,/yy/p' sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO

a i

#在第三行后面追加内容
[root@oldboyedu ~]# sed '3aoldboy' sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
104,$yy,CFO
105,$feixue,CIO

#在第四行的上面插入内容
[root@oldboyedu ~]# sed '4ioldboy'  sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
104,$yy,CFO
105,$feixue,CIO

#插入多行
[root@oldboyedu ~]# sed '4ioldboy
oldgirl'  sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
oldgirl
104,$yy,CFO
105,$feixue,CIO

#追加多行
[root@oldboyedu ~]# sed '3aoldboy
oldgirl'  sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
oldgirl
104,$yy,CFO
105,$feixue,CIO

#在结尾追加内容
[root@oldboyedu ~]# sed  '$aoldboy'  sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
oldboy

#全局
[root@oldboyedu ~]# sed 's#oldboy#jinke#g'  sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
[root@oldboyedu ~]# sed -i.org  's#oldboy#jinke#g'  sed.txt

[root@oldboyedu ~]# sed 's#^SELINUX=.*#SELINUX=disabled#g'  /etc/sysconfig/selinux

#c  原位置替换
[root@oldboyedu ~]# sed  '/^SELINUX=/c SELINUX=enforcing' /etc/sysconfig/selinux

#第一行到第五行的root替换 
[root@oldboyedu ~]# sed '1,5s#root#oldboy#g' passwd

#替换第一行的root
[root@oldboyedu ~]# sed '1s#root#oldboy#g' passwd

#替换特殊字符使用转义
[root@oldboyedu ~]# sed 's#$#%#g' sed.txt
101,$jinke,CEO%
102,$zhangyao,CTO%
103,$Alex,COO%
104,$yy,CFO%
105,$feixue,CIO%
[root@oldboyedu ~]# sed 's#$#%#g' sed.txt
101,%jinke,CEO
102,%zhangyao,CTO
103,%Alex,COO
104,%yy,CFO
105,%feixue,CIO

[root@oldboyedu ~]# sed 's//sbin/nologin/oldboy/g' passwd

#后向引用
[root@oldboyedu ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@oldboyedu ~]# ip a s eth0 | sed -n '3p'
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0 | sed -n '3p' |sed -r  's#.*t (.*)/.*#1#g'
10.0.0.150
[root@oldboyedu ~]# ip a s eth0 |sed -nr  '3s#.*t (.*)/.*#1#gp'
10.0.0.150

[root@oldboyedu ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.150  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::80b2:dc89:7adf:c7b1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1d:ca:3a  txqueuelen 1000  (Ethernet)
        RX packets 20849  bytes 1902050 (1.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15800  bytes 2443358 (2.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@oldboyedu ~]# ifconfig  eth0 |sed -n  '2p'
        inet 10.0.0.150  netmask 255.255.255.0  broadcast 10.0.0.255
[root@oldboyedu ~]# ifconfig  eth0 |sed -nr  '2s#.*t (.*)#1#gp'
10.0.0.255
[root@oldboyedu ~]# ifconfig  eth0 |sed -nr  '2s#.*t (.*)  n.*#1#gp'
10.0.0.150

[root@oldboyedu ~]# stat sed.txt
  File: ‘sed.txt’
  Size: 75        	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 67160646    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-07-25 11:34:50.285127299 +0800
Modify: 2019-07-25 11:34:29.851127028 +0800
Change: 2019-07-25 11:34:29.851127028 +0800
 Birth: -

 

cat>/root/hostname_ip.sh<<"EOF"
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
  echo "/bin/sh $0 hostname PartIP"
  exit 1
fi
hostnamectl  set-hostname   $1
if [ $? -eq 0 ];then
    action "hostname update Successful!" /bin/true
else
    action "hostname update Failed!" /bin/false
fi
Ip=$(ip a s eth0 |awk -F '[./]' 'NR==3{print $4}')
sed -i "s#$Ip#$2#g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
if [ $? -eq 0 ];then
    action "IP update Successful!" /bin/true
else
    action "IP update Failed!" /bin/false
fi
systemctl  restart  network
bash
EOF

 
Awk #取列,计算,统计。数组。
选项: 
		-F   FS   #输入分隔符,默认是空格
		-v		  #配合输出分隔符使用
		OFS		  #输出分隔符
		BEGIN    END
		$n  	  #某列
		NR		  #行号
		$0		  #完整内容
		$NF		  #最后一列
		i++		  #计算次数
		i=i+$N    #计算和

取行

[root@oldboy ~]# awk  'NR==3'  sed.txt
103,$Alex,COO
[root@oldboy ~]# awk  'NR==1,NR==3'  sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
[root@oldboy ~]# awk 'NR==1;NR==3'  sed.txt
101,$jinke,CEO
103,$Alex,COO
[root@oldboy ~]# awk  'NR>1 && NR<3'  sed.txt
102,$zhangyao,CTO
[root@oldboy ~]# awk  'NR>=1 && NR<=3'  sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO

过滤

[root@oldboy ~]# awk  '/jinke/' sed.txt
101,$jinke,CEO
[root@oldboy ~]# awk  '!/jinke/' sed.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
[root@oldboy ~]# awk '/jinke|yy/' sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk '/jinke/;/yy/' sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk '/jinke/,/yy/' sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO

取列

[root@oldboy ~]# awk -F '[,]' '{print $3}' sed.txt
CEO
CTO
COO
CFO
CIO

#环境准备  
cat >>reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF

#根据列进行匹配

#第三列以3开头的行
[root@oldboy ~]# awk '$3~/^3/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wang Xiaoai 3515064655 :50:95:135

取反

[root@oldboy ~]# awk '$3!~/^3/' reg.txt
Zhang Dandan 41117397 :250:100:175
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175

#第三列以1或5为结尾的行
[root@oldboy ~]# awk '$3~/[15]$/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175

#显示姓zhang的人第二次的捐款金额
[root@oldboy ~]# awk  -F '[ :]' '/^Zhang/{print $1,$2,$6}'  reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90

显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
[root@oldboy ~]# awk  '/Xiaoyu/{print $4}' reg.txt  |tr ':'  '$'
$155$90$201

[root@oldboy ~]# awk  '/Xiaoyu/{print $4}' reg.txt  |sed 's#:#$#g'
$155$90$201

[root@oldboy ~]# awk  '/Xiaoyu/{print $4}' reg.txt  |sed 's#:#$#g'
$155$90$201

[root@oldboy ~]# awk -F  '[ :]'  '/Xiaoyu/{print "$"$5"$"$6"$"$7}' reg.txt 
$155$90$201

[root@oldboy ~]# awk -F '[ :]' -vOFS='$'  '/Xiaoyu/{print "$"$5,$6,$7}' reg.txt
$155$90$201

显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
[root@oldboy ~]# awk   '{print $1","$2}'  reg.txt 
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
[root@oldboy ~]# awk -vOFS=','  '{print $1,$2}' reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

[root@oldboy ~]# awk   '{print $1,$2}'  reg.txt  |tr ' ' ','
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

取ip地址

[root@oldboy ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.150  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::80b2:dc89:7adf:c7b1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1d:ca:3a  txqueuelen 1000  (Ethernet)
        RX packets 25397  bytes 2315305 (2.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19057  bytes 2801352 (2.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@oldboy ~]# ifconfig eth0 |awk 'NR==2{print $2}'
10.0.0.150
[root@oldboy ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@oldboy ~]# ip a s eth0 |awk -F '[ /]*'  'NR==3{print $3}'
10.0.0.150

#排除空行 
[root@oldboy ~]# awk  '!/^[ 	]*$/'  file1
lhlgsd
fdssgdgs
gsdgd
[root@oldboy ~]# awk  '!/^s*$/'  file1
lhlgsd
fdssgdgs
gsdgd

[root@oldboy ~]# awk '/^r/'  passwd 
root:x:0:0:root:/root:/bin/bash
redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
roott
[root@oldboy ~]# awk '/h$/'  passwd 
root:x:0:0:root:/root:/bin/bash


计算

[root@oldboy ~]# cat test.log
10 20
[root@oldboy ~]# awk '{print $2/$1}' test.log
2
[root@oldboy ~]# awk '{print $2+$1}' test.log
30
[root@oldboy ~]# awk '{print $2-$1}' test.log
10
[root@oldboy ~]# awk '{print $2*$1}' test.log
200
[root@oldboy ~]# awk '{print $2^$1}' test.log
10240000000000
[root@oldboy ~]# awk  'BEGIN{print  10-10 }'
0
[root@oldboy ~]# awk  'BEGIN{print  10+10 }'
20
[root@oldboy ~]# awk  'BEGIN{print  10/10 }'
1
[root@oldboy ~]# awk  'BEGIN{print  10*10 }'
100
[root@oldboy ~]# awk  'BEGIN{print  10^10 }'
10000000000

#计算内存可用的百分比
[root@oldboy ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         148        1526           9         305        1646
Swap:          2047           0        2047
[root@oldboy ~]# free -m |awk '/^Mem/'
Mem:           1980         148        1526           9         305        1646
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2}'
0.770707
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2*100}'
77.0707
[root@oldboy ~]# free -m |awk '/^Mem/{print $4/$2*100"%"}'
77.0707%


Awk 数组

#统计/etc/services 中空行的数量

[root@oldboy ~]# awk  '/^$/'  /etc/services  |wc -l
17
[root@oldboy ~]# sed  -n  '/^$/p'  /etc/services  |wc -l
17
[root@oldboy ~]# grep -c '^$'  /etc/services 
17
[root@oldboy ~]# awk  '/^$/{i++}END{print i}'  /etc/services
17

#统计passwd文件中所有shell的数量
[root@oldboy ~]# awk -F:  '{print $NF}' passwd |sort |uniq -c
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     32 /sbin/nologin
      1 /sbin/shutdown

[root@oldboy ~]# awk -F:  '{shell[$7]++}END{for (i in shell)print i,shell[i]}' passwd  |sort -rnk2 |column  -t
/sbin/nologin   32
/sbin/shutdown  1
/sbin/halt      1
/bin/sync       1
/bin/bash       1

#计算
[root@oldboy ~]# seq  200 |awk '{i=i+$1}END{print i}'
20100
[root@oldboy ~]# seq  100 |awk '{i=i+$1}END{print i}'
5050
[root@oldboy ~]# seq  101 |awk '{i=i+$1}END{print i}'
5151