第2章 ***********sed***********. 1目  录

2.1 -------sed命令小结及小结图---- 1

2.2 -------第几行---------- 2

2.3 -------最后一行---------- 2

2.4 ---------从哪行到哪行-------- 3

2.5 -------某几行--------- 3

2.6 ---------上插入行----------- 3

2.7 -----------不包含oldboy(条件)----- 4

2.8 -----sed不显示空行----------- 4

2.9 ------------把所有小写字母()起来----- 4

2.10 -----变量运用------ 5

2.11 --------------命令行chkconfig优化开机自启----- 6

2.12 ----------找特定行替换某一些内容----- 6

2.13 -----------显示和不显示,要取消默认输出... 7

2.14 --------------chkconfig 用sed优化----------- 8

第3章 -------shell基础------- 9

3.1 --------写脚本---- 9

3.2 -------------变量-------- 9

3.3 -----------永久生效有几种-- 10

3.4 ---------  普通变量,环境变量与脚本---------- 10

3.5 ------------------vim批量加内容v  Ctrl+v---- 11

3.6 ----------awk支持小数的计算------------ 11

3.7 ---------read与计算应用----------- 12

3.8 --------------test和[  ] 进行条件判断----------------- 14

3.9 ----&& || 条件判断---------- 14

3.10 ------------如果---- 15

3.11 -----------if条件判断------- 15

3.12 -------------- 参数个数判断------------- 15

3.13 ------------for循环------- 18

3.14 ------------chkconfig优化开机自启动服务的脚本----- 19

3.15 ------------出错暂时无法解决的脚本-------- 19

3.16 ------------应该再来一个对是否是数字的判断----- 20

3.17 ------------查看脚本执行的状况- sh -x  --------- 21

第4章
**************awk*******. 21

4.1 ------awk执行流程图... 21

4.2 -----------awk数组结构-------- 22

4.3 ------awk执行过程表--------- 22

4.4 ---------awk分隔符哪行哪列-------- 24

4.5 --------awk题---------- 24

4.6 -----------awk替换------------ 26

4.7 ----企业案例3:统计/etc/services文件里面的空行数量--- 27

4.8 --------awk 数组----------- 28

4.9 -------企业面试题1:统计域名访问次数---- 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html http://www.etiantian.org/3.html http://post.etiantian.org/2.html 30

4.10 ---------awk统计的课后题------- 31

4.11 ----------awk识别花括号加条件---- 34

4.12 ----- a[$1]=a[$1]+$2----- 35

4.13 5. ip出现次数及使用流量... 36

4.14 ------awk 中的begin---------- 40

4.15 ------------awk版本4以上有替换功能----- 41

第5章 ---------总结大集合----- 41

5.1 -------查看端口总结 
踢死了妮妮(tslnn)------- 42

5.2 ----------- 排查无法上网总结  3p----- 43

5.3 --------------  vi/vim快捷方式总结---- 44

5.4 ---sed总结-------- 46

5.5 ------awk总结--------- 46

5.6 ------rename----- 47

第2章 ***********sed***********

2.1 -------sed命令小结及小结图----

sed 参数 条件 命令(sed内置命令) 文件

命令:i,a,d,s,p

默认输出,取消默认输出;找谁做什么,不做什么,(替换不替换,显示不显示,可以插加不插加吗,可以删不删吗)

!:放在命令前吗?

增:(行号i  行号a 内容)上插下追,insert
append ,加多行操作\n cat也能多行追加

删:d    同,命令改d

改(替换):'Ms###Ng' M查找s 替换,
g 全局替换 缺省替换行第一个,加数字几就是找到的第几个进行替换,ng从哪个到最后替换。变化的定义成变量,再替换,双引号解析,双引号变量替换成变量。找到哪行替换,找到不包含谁的行不替换(排除哪行其他行替换)

四组长吴 2017/9/19 9:02:59

可以sed '2s#[0-9]#<&>#2p'  精准定位到第二行的第二个匹      配项

查:p,-n打印经常要取消默认输出, ;单行,多行,第几行到第几行,哪儿到哪儿,逗号隔开,;某几行,分号隔开条件加命令;日志第一个15到第一个08,最后一行$

p和d显示不显示谁,d相当于排除显示

cat
>person.txt <<EOF
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
EOF

2.2 -------第几行----------

[root@小马过河 old]# sed -n '3p' person.txt

103,Alex,COO

[root@小马过河 old]# sed -n '/oldboy/p' person.txt

101,oldboy,CEO

2.3 -------最后一行----------

方法一:

[root@小马过河 old]# sed -n '$p' person.txt

105,feixue,CIO

方法二:

[root@小马过河 old]# sed -n "\$p" person.txt

105,feixue,CIO

2.4 ---------从哪行到哪行--------

[root@小马过河 old]# sed -n '2,4p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

[root@小马过河 old]# sed -n '/zhangyao/,/yy/p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

[root@小马过河 old]#

2.5 -------某几行---------

[root@小马过河 old]# sed -n '2p;3p;5p' person.txt

102,zhangyao,CTO

103,Alex,COO

105,feixue,CIO

lrzsz  zip文件两个系统均能用,xshell属性指定下载/加载路径

离开死s,过来ri

[root@小马过河 old]# zip -r a.zip /etc/services 
  adding: etc/services (deflated 80%)

压缩了百分比

2.6 ---------上插入行-----------

[root@小马过河 old]# sed '/zhangyao/i wo shi machangwei' person.txt

101,oldboy,CEO

wo shi machangwei

102,zhangyao,CTO

2.7 -----------不包含oldboy(条件)-----

方法一:

[root@小马过河 old]# sed  -n '/oldboy/!p'
person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

方法二:

[root@小马过河 old]# sed '/oldboy/d' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

2.8 -----sed不显示空行-----------

[root@小马过河 ~]# cat 1.txt |sed 
'/[a-z0-9:/]/!d'

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

2.9 ------------把所有小写字母()起来-----

[root@小马过河 ~]# sed 's#([a-z])#(\1)#g' 1.txt -r

(r)(o)(o)(t):(x):0:0:(r)(o)(o)(t):/(r)(o)(o)(t):/(b)(i)(n)/(b)(a)(s)(h)

(b)(i)(n):(x):1:1:(b)(i)(n):/(b)(i)(n):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)

[root@小马过河 ~]# sed 's#[0-9]#<&>#3' person.txt

10<1>,oldboy,CEO

10<2>,zhangyao,CTO

10<3>,Alex,COO

10<4>,yy,CFO

10<5>,feixue,CIO

[root@小马过河 ~]# sed 's#,#(,)#' person.txt

101(,)oldboy,CEO

102(,)zhangyao,CTO

103(,)Alex,COO

104(,)yy,CFO

105(,)feixue,CIO

2.10 -----变量运用------

[root@小马过河 ~]# sed "s#$ma#m#g" person.txt

101,oldboy,mEO

102,zhangyao,mTO

103,Alex,mOO

104,yy,mFO

105,feixue,mIO

[root@小马过河 ~]# sed "s#$ma#m$mam#g" person.txt

101,oldboy,mEO

102,zhangyao,mTO

103,Alex,mOO

104,yy,mFO

105,feixue,mIO

[root@小马过河 ~]# sed "s#$ma#m$ma#g" person.txt

101,oldboy,mCEO

102,zhangyao,mCTO

103,Alex,mCOO

104,yy,mCFO

105,feixue,mCIO

[root@小马过河 ~]# sed "s#$ma#$ma#g" person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed "s#$ma#$mam#g" person.txt

101,oldboy,EO

102,zhangyao,TO

103,Alex,OO

104,yy,FO

105,feixue,IO

[root@小马过河 ~]#

2.11 --------------命令行chkconfig优化开机自启-----

[root@小马过河 ~]# chkconfig|sed -rn '/sshd|network|rsyslog|crond|systat/!s#^(.*)0:.*$#chkconfig
\1 off#gp'|bash

找到!不替换,取消它的默认输出,

[root@小马过河 ~]#

[root@小马过河 ~]# chkconfig|sed -r '/sshd|network|rsyslog|crond|systat/d'|sed -r
's#^(.*)0:.*$#chkconfig \1 off#g'|bash

[root@小马过河 ~]# chkconfig

2.12 ----------找特定行替换某一些内容-----

其他行为默认输出

[root@小马过河 ~]# sed '/yy/s#[0-9]##g' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

,yy,CFO

105,feixue,CIO

不包含yy的行前面的数字替换,默认输出和取消默认输出

[root@小马过河 ~]# sed -n '/yy/s#[0-9]##gp' person.txt

,yy,CFO

[root@小马过河 ~]# sed -n '/yy/!s#[0-9]##gp' person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

,feixue,CIO

root@小马过河 ~]# sed '/yy/!s#[0-9]##g' person.txt

,oldboy,CEO

,zhangyao,CTO

,Alex,COO

104,yy,CFO

,feixue,CIO

2.13 -----------显示和不显示,要取消默认输出

[root@小马过河 ~]# sed -n '/old/!p' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed -n '/old/p' person.txt

101,oldb

除了要找的显示一次其余的显示两次

[root@小马过河 ~]# sed '/old/!p' person.txt

101,oldboy,CEO

102,zhangyao,CTO

102,zhangyao,CTO

103,Alex,COO

103,Alex,COO

104,yy,CFO

104,yy,CFO

105,feixue,CIO

105,feixue,CIO

找到谁不删除和找到谁删除,不需要取消默认输出,可以用来显示哪行不显示哪行(不要空要空呢?)

[root@小马过河 ~]# sed  '/old/d' person.txt

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@小马过河 ~]# sed  '/old/!d' person.txt

101,oldboy,CEO

2.14 --------------chkconfig 用sed优化-----------

方法总结:如果想要引用一堆东西中的某一列然后批量生成其它的东西,一个方法是用sed找到找一列,保护起来反向引用替换成想要的批量命令,交给bash执行。即是用sed批量生成含有某一列变量的各种内容

先批量显示一下做得命令,不要忘了交给bash执行。for循环哪里也有一个方法

sshd          
      0:off      1:off      2:on       3:on       4:on       5:on       6:off

svnserve      
0:off      1:off      2:on       3:on       4:on       5:on       6:off

sysstat       
0:off      1:on       2:off      3:off      4:off      5:off      6:off

udev-post     
       0:off      1:on       2:on       3:on       4:on       5:on       6:off

[root@小马过河 scripts]# chkconfig|sed -nr
'/sshd|network|crond|sysstat|rsyslog/!s#(.*)0:.*#chkconfig \1 off#gp'|bash

[root@小马过河 scripts]# chkconfig

abrt-ccpp     
0:off      1:off      2:off      3:off      4:off      5:off      6:off

abrtd         
       0:off      1:off      2:off      3:off      4:off      5:off      6:off

acpid         
      0:off      1:off      2:off      3:off      4:off      5:off      6:off

atd           
      0:off      1:off      2:off      3:off      4:off      5:off      6:off

auditd        
       0:off      1:off      2:off      3:off      4:off      5:off      6:off

blk-availability    0:off      1:on       2:off      3:off      4:off      5:off      6:off

cpuspeed      
      0:off      1:on       2:off      3:off      4:off      5:off      6:off

crond         
      0:off      1:off      2:on       3:on       4:on       5:on       6:off

条件,判断,循环,变量

定义函数,case判断执行

第3章 -------shell基础-------

3.1 --------写脚本----

命令解释器:(几个人,交给bash执行)

注释:路径,作者

脚本

---------

绝对路径,相对路径执行脚本 相对要有执行权限

3.2 -------------变量--------

环境变量  普通变量   特殊变量

sed 外面删除内容

3.3 -----------永久生效有几种--

3.4 ---------  普通变量,环境变量与脚本----------

执行脚本使用变量,普通变量放入脚本或(export)定义成环境变量才可以

a=213

[root@小马过河 scripts]# sh a

[root@小马过河 scripts]# export a=213

[root@小马过河 scripts]# sh a

213

unset 变量
取消变量,环境的也可以

用户登录显示的东西,运行的脚本/etc/profile.d/

/etc/profile、/etc/bashrc、
        /etc/profile.d/   
~/.bash_profile ~/.bashrc

[root@小马过河 profile.d]# ma=2

[root@小马过河 profile.d]# echo $ma

2

[root@小马过河 profile.d]# echo $mam

[root@小马过河 profile.d]# echo $ma m

2 m

[root@小马过河 profile.d]# echo "$ma"m                     方法一

2m

[root@小马过河 profile.d]# echo ${ma}m                     方法二

2m

[root@小马过河 profile.d]# echo ·$m·am                      错误一

··am

[root@小马过河 scripts]# echo `$a`a                          错误二

-bash: 1: command not found

a

[root@小马过河 scripts]# echo $($a)a                         错误三

-bash: 1: command not found

a

3.5 ------------------vim批量加内容v  Ctrl+v----

单用户进入,救援模式进入

vi从第几行到最后一行,:n,$s###g

当前行到最后一行:  :.$

所有航

批量加内容v  Ctrl+v 上下左右选中输入内容,按Esc退出,不能用Alt选中,因为Alt是xshell功能,不是vim的功能

3.6 ----------awk支持小数的计算------------

[root@小马过河 scripts]# awk -va=1 -vb=3 'BEGIN{print a/b}'

0.333333

[root@小马过河 scripts]# vim 1.t

#!/bin/bash

echo $1 $3 $0 $#                                  怎么使用参数

[root@小马过河 scripts]# sh 1.t

1.t 0

[root@小马过河 scripts]# sh 1.t a b c d e

a c 1.t 5

[root@小马过河 scripts]# echo $?            
#$?看上一个命令执行的状况

可以看命令行的,可以看脚本执行情况的

0

[root@小马过河 scripts]# s 1.t a b c d e

-bash: s: command not found

[root@小马过河 scripts]# echo $?

127

$?有脚本?

:noh

3.7 ---------read与计算应用-----------

[root@小马过河 scripts]# vim cal.sh

#!/bin/bash

read  -t40
-p "输入你的游戏帐号:"
a \n

read  -t40
-p "输入你的游戏帐号:"
b \n

#a=$1

#b=$2

#echo a + b|bc

#echo a - b|bc

#echo a \* b|bc

#echo a \/ b|bc

#echo a \% b|bc

#echo a \^ b|bc

awk -va=$a -vb=$b 'BEGIN{print a+b}'

awk -va=$a -vb=$b 'BEGIN{print a-b}'

awk -va=$a -vb=$b 'BEGIN{print a*b}'

awk -va=$a -vb=$b 'BEGIN{print a/b}'

awk -va=$a -vb=$b 'BEGIN{print a%b}'

awk -va=$a -vb=$b 'BEGIN{print a^b}'

~

~

"cal.sh" 17L, 434C written

[root@小马过河 scripts]# sh cal.sh

输入你的游戏帐号:4

输入你的游戏帐号:3

7

1

12

1.33333

1

64

[root@小马过河 scripts]# vim cal.sh

#!/bin/bash

read  -t40
-p "输入你的游戏帐号:"
a \n

read  -t40
-p "输入你的游戏帐号:"
b \n

echo $a + $b|bc

echo $a - $b|bc

echo $a \* $b|bc

echo $a \/ $b|bc

echo $a \% $b|bc

echo $a \^ $b|bc

#awk -va=$a -vb=$b 'BEGIN{print a+b}'

#awk -va=$a -vb=$b 'BEGIN{print a-b}'

#awk -va=$a -vb=$b 'BEGIN{print a*b}'

#awk -va=$a -vb=$b 'BEGIN{print a/b}'

#awk -va=$a -vb=$b 'BEGIN{print a%b}'

#awk -va=$a -vb=$b 'BEGIN{print a^b}'

~

~

~

~

"cal.sh" 15L, 434C written

[root@小马过河 scripts]# sh cal.sh

输入你的游戏帐号:4

输入你的游戏帐号:3

7

1

12

1

1

64

[root@小马过河 scripts]#

[root@小马过河 scripts]# find . -name "machangwei"

[root@小马过河 scripts]# echo $?

0

[root@小马过河 scripts]# cat machangwei

cat: machangwei: No such file or directory

[root@小马过河 scripts]# echo $?

1

3.8 --------------test和[  ] 进行条件判断-----------------

[root@小马过河 scripts]# test -f changwei

[root@小马过河 scripts]# echo $?

1

[root@小马过河 scripts]# test -f a

[root@小马过河 scripts]# echo $?

0

[root@小马过河 scripts]# [ -d ma ]

[root@小马过河 scripts]# echo $?

1

[root@小马过河 scripts]# mkdir changwei

[root@小马过河 scripts]# [ -d changwei ]

[root@小马过河 scripts]# echo $?

0

3.9 ----&& || 条件判断----------

[root@小马过河 scripts]# [ -d changwei
]&&echo dir exit

dir exit

我感觉机子在前一个命令结束之后有一个对返回值的判断

[root@小马过河 scripts]# [ -f sss ]||touch sss

[root@小马过河 scripts]# ls

1.t  a  cal.sh 
cal.sh.bak  changwei  date.sh 
html.sh  ip.sh  sss 
tar.sh

[root@小马过河 scripts]# [ -d xiaoma ]&&echo dir exit

[root@小马过河 scripts]#

3.10 ------------如果----

如果文件不存在就干啥,如果文件存在就不干啥了

3.11 -----------if条件判断-------

[root@小马过河 scripts]# sh if.sh

[root@小马过河 scripts]# ll maxiaowei

total 0

[root@小马过河 scripts]# cat if.sh

#!/bin/bash

if [ -d maxiaowei ];

then

echo
maxiaowei exit

else

mkdir
maxiaowei

fi

[root@小马过河 scripts]#

3.12 -------------- 参数个数判断-------------

"canshu.sh" 10L, 135C written

[root@小马过河 scripts]# sh canshu.sh 2 3

5

[root@小马过河 scripts]# sh canshu 2

sh: canshu: No such file or directory

[root@小马过河 scripts]# sh canshu.sh 2 3

5

[root@小马过河 scripts]# sh canshu.sh  2

canshu wei 2

[root@小马过河 scripts]# cat canshu.sh

#!/bin/bash

a=$1

b=$2

if [  $# -ne
2 ];

then

echo  canshu wei 2

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

fi

[root@小马过河 scripts]#

[root@小马过河 scripts]# sh canshu.yuan 4 3

7

1

12

1.33333

1

[root@小马过河 scripts]# sh canshu.yuan 4

canshu wei 2

[root@小马过河 scripts]# cat anshu.yuan

cat: anshu.yuan: No such file or directory

[root@小马过河 scripts]# cat canshu.yuan

#!/bin/bash

a=$1

b=$2

if [  $# -ne
2 ];

then

echo  canshu wei 2

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

awk
-va=$a -vb=$b 'BEGIN{print a-b}'

awk
-va=$a -vb=$b 'BEGIN{print a*b}'

awk
-va=$a -vb=$b 'BEGIN{print a/b}'

awk
-va=$a -vb=$b 'BEGIN{print a%b}'

fi

[root@小马过河 scripts]#

高超的脚本:

[root@小马过河 scripts]# sh gaochao.sh

命令错误 请输入两个数字

[root@小马过河 scripts]# sh gaochao.sh 4 5

I love you 开始输出结果

相加结果

9

相减结果

-1

相乘结果

20

相除结果

0.8

[root@小马过河 scripts]# cat gaochao.sh

#!/bin/bash

num=$#

if [ "$num" -ne "2" ] ; then

echo
"命令错误 请输入两个数字"

exit 1

else

echo
-e "I love you 开始输出结果\n"

fi

a=$1

b=$2

echo
"相加结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1+num2}'

echo
"相减结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1-num2}'

echo
"相乘结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1*num2}'

echo
"相除结果"

awk -vnum1=$1 -vnum2=$2 'BEGIN{print num1/num2}'

[root@小马过河 scripts]#

结合一下 read

结合函数

3.13 ------------for循环-------

多个变量就循环

for n in xx

do

done

定义变量在哪,

对每一个变量值循环操作

[root@小马过河 scripts]# vim wenjian.sh

#!/bin/bash

for hd in {01..20}

do

date -s
"201705$hd"

touch
/tmp/taojin-$(date +%F).txt

done

for hd in 2017-05-{01..20}
do
date -s $hd
filename=$(date +%F)
touch $filename".txt"
done

3.14 ------------chkconfig优化开机自启动服务的脚本-----

a=里面的命令放在命令行执行要|bash,在这里不需要应该是因为它在脚本里,执行脚本时就已经使用执行命令了

[root@小马过河 scripts]# cat youhuakaiji.sh

#!/bin/bash

a=`chkconfig|sed -nr
'/sshd|network|cron|sysstat|rsyslog/!s#(.*)0:.*#\1#gp'`

for machangwei in $a

do

chkconfig
$machangwei off

done

[root@小马过河 scripts]#

同学的脚本

#!/bin/bash
for n in $(chkconfig|sed -r '/sshd|network|crond|sysstat|rsyslog/d'|sed -r 's#^(.*)0:.*$#\1#g')
do
   chkconfig  $n off
done

3.15 ------------出错暂时无法解决的脚本--------

问题:有read命令,但是无法使后面的计算得到执行

思路拓展:是否需要有个对输入是数字的判断呢

[root@小马过河 scripts]# vim canshu.sh

#!/bin/bash

read -p "请输入两个数字:" a

read -p "请输入两个数字:" b

a=$1

b=$2

if [  $# -ne
1 ];

then

echo 警告:应输入两个数字!!

exit

else

awk
-va=$a -vb=$b 'BEGIN{print a+b}'

awk
-va=$a -vb=$b 'BEGIN{print a-b}'

awk
-va=$a -vb=$b 'BEGIN{print a*b}'

awk
-va=$a -vb=$b 'BEGIN{print a/b}'

awk
-va=$a -vb=$b 'BEGIN{print a%b}'

fi

[root@小马过河 scripts]# sh canshu.sh

请输入两个数字:1 3

请输入两个数字:3

警告:应输入两个数字!!

[root@小马过河 scripts]# sh canshu.sh

请输入两个数字:1

请输入两个数字:3

警告:应输入两个数字!

3.16 ------------应该再来一个对是否是数字的判断-----

[root@小马过河 scripts]# sh canshu.sh # # # # # # # #

警告:应输入两个数字!!

[root@小马过河 scripts]# sh canshu.sh nishi shui?

0

0

0

awk: fatal: division by zero attempted

awk: fatal: division by zero attempted in `%'

3.17 ------------查看脚本执行的状况- sh -x  ---------

计算器加上判断参数个数,扩展判断这两个参数是否为数字。

课后练习题:批量创建用户并设置随机密码

第4章 **************awk*******

------------awk--------

4.1 ------awk执行流程图

4.2 -----------awk数组结构--------

4.3 ------awk执行过程表---------

取列计算(统计)

条件行(可用行列),哪列,

awk 内置变量  指定分隔符FS,指定输出分隔符OFS,最后一列NF,倒数第几列$(NF-n),只要哪列可以最好以这列前后作为分隔符 多个相同字符加+(+正则表达),指定行分隔符RS,支持正则表达式,

可加字符""

算多少行,'{i++}END
print i'

算每行数量相加 '{i=i+$0($1)}END
print i'

取哪列 $数字,$0所有列就是全行内容

像平面直角坐标系,找列^$

替换sed好

计算awk

!可放在~前

mkdir -p /server/files/
cat >>/server/files/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

m 第一列是姓氏
m 第二列是名字
m 第一第二列合起来就是姓名
m 第三列是对应的ID号码
m 最后三列是三次捐款数量

4.4 ---------awk分隔符哪行哪列--------

条件:

模糊找行

找列有模糊条件的行

[root@小马过河 ~]# awk '$2~/waiwai/' /server/files/reg.txt

[root@小马过河 ~]# awk '$2~/X/' /server/files/reg.txt

Zhang Xiaoyu    390320151 
:155:90:201

Wang 
Xiaoai    3515064655 :50:95:135

Zhang Xiaoyu    390320151 
:155:90:201

Wang 
Xiaoai    3515064655 :50:95:135

4.5 --------awk题----------

1显示Xiaoyu的姓氏和ID号码
2显示所有ID号码最后一位数字是1或5的人的全名
3姓氏是Zhang的人,显示他的第二次捐款金额及她的名字
4显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135

1

[root@小马过河 files]# awk '$2~/Xiaoyu/{print $1,$3}' reg.txt

Zhang 390320151

Zhang 390320151

2.

方法一:

[root@小马过河 files]# awk '$3~/(1|5)$/{print $1$2,$3}' reg.txt

ZhangXiaoyu 390320151

WuWaiwai 70271111

WangXiaoai 3515064655

方法二:

[root@小马过河 files]# awk '$3~/[15]$/{print
$1$2,$3}' reg.txt

ZhangXiaoyu 390320151

WuWaiwai 70271111

WangXiaoai 3515064655

3.

[root@小马过河 files]# awk -F "[ :]+" '$1~/Zhang/{print $(NF-1),$2}'
reg.txt

100 Dandan

90 Xiaoyu

100 Dandan

90 Xiaoyu

[root@小马过河 files]# echo 12312312|tr "123" "abc"

abcabcab

4.

[root@小马过河 files]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $2,$NF}'
reg.txt

Xiaoyu $155$90$201

4.6 -----------awk替换------------

[root@小马过河 files]# awk '{gsub(/:/,"$",$NF);print $0}' reg.txt

Zhang Dandan 41117397 $250$100$175

Zhang Xiaoyu 390320151 $155$90$201

Meng Feixue 80042789 $250$60$50

~  !~

判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin),如果是显示用户名字

[root@小马过河 files]#
awk -F ":" '$NF!~/nologin$/{print $1}' /etc/passwd

root

sync

shutdown

[root@oldboyedu-40 files]# awk '{gsub(/:/,"$",$NF) ; print $0}' reg.txt |column -t
Zhang  Dandan    41117397    $250$100$175
Zhang  Xiaoyu    390320151   $155$90$201

awk读取之前就执行

4.7 ----企业案例3:统计/etc/services文件里面的空行数量---

不用end显示过程

用途:可以统计行数

[root@小马过河 files]# awk '/^$/' /etc/services |wc -l

16

[root@小马过河 files]# awk '/^$/' /etc/services |uniq -c

16

[root@小马过河 files]# awk '/^$/{i++} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{++i} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{i++} ; END{print i}' /etc/services

16

[root@小马过河 files]# awk '/^$/{i=i+1} ; END{print i}' /etc/services

16

用途:
可以对一列内容进行累加

seq 10 >num.txt 计算这个文件每一行数字相加的结果

i=i+$0 ===累积相加 累加

[root@oldboyedu-40 files]# awk '{i=i+$0;print i}' num.txt 
1
3
6
10
15
21
28
36
45
55
[root@oldboyedu-40 files]# awk '{i=i+$0}END{print i}' num.txt 
55

[root@小马过河 files]# awk '{i=i+$0};END {print i}' num.txt

5050

[root@小马过河 files]# awk '{i=i+$1};END {print i}' num.txt

5050

算多少行,'{i++}END print i'

算每行数量相加 '{i=i+$0($1)}END
print i'

'{hotel[$2]++;END print
hotel["www"]}'

hotel[]数组,$2为awk找到的第二列内容,将它放进hotel数组作为变量,++为将数组里面的相同变量进行统计,然后统计结果作为变量值。

4.8 --------awk 数组-----------

'{hotel[$2]++;END
print hotel["www"]}'

'{hotel[$2]++}END
{for (ma in hotel) print ma,hotel[ma]}'

{hotel[$2]++}:hotel[]数组,$2为awk找到的第二列内容,将它放进hotel数组作为变量,++为将数组里面的相同变量进行统计,然后统计结果作为变量值。

END:         没有的话就会显示awk命令执行过程

for (ma in hotel): 
定义变量ma 在数组hotel里

print ma,hotel[ma] : 
打印变量ma,以及变量值

用途:(简化:计算列重复值)

对ip地址去重并统计重复数

即对一列重复的内容去重并统计重复数.

[root@小马过河 files]# awk -F "[/]+" '{hao[$2]++}END{for (ma in
hao)print hao[ma],ma}' 1

1 mp3.etiantian.org

2 post.etiantian.org

3 www.etiantian.org

定义数组,定义变量为数组元素,打印变量名及变量值

[root@小马过河 files]# awk 'BEGIN{hotel[110]="lidao"
;hotel[119]="tanjiaoshou";hotel[121]="taojin";

print
hotel[110],hotel[119],hotel[121]}'

lidao tanjiaoshou taojin

[root@小马过河 files]#

4.9 -------企业面试题1:统计域名访问次数----
处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题)
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html

方法一:

[root@小马过河 files]# cat 1

http://www.etiantian.org/index.html

http://www.etiantian.org/1.html

http://post.etiantian.org/index.html

http://mp3.etiantian.org/index.html

http://www.etiantian.org/3.html

http://post.etiantian.org/2.html

[root@小马过河 files]# awk -F "[/]+" '{print $2}' 1|sort|uniq -c|sort -r

3
www.etiantian.org

2
post.etiantian.org

1
mp3.etiantian.org

方法二:

[root@小马过河 files]# awk -F "[/]+" '{hao[$2]++}END{for (ma in
hao)print hao[ma],ma}' 1

1 mp3.etiantian.org

2 post.etiantian.org

3 www.etiantian.org

4.10 ---------awk统计的课后题-------

echo  ;echo 可以不换行输出吗?

课后题目:

#secure.zip access.zip

1.统计secure文件中谁在破解你的密码(统计出破解你密码的ip地址出现的次数)

2.统计access.log文件中对ip地址去重并统计重复数

3.统计access.log文件中网站一共使用了多少流量

4.统计access.log文件中每个ip地址使用了多少流量

  1. awk统计有失败的ip并计算个数

[root@小马过河 machangwei]# awk '$6~/Failed/{heike[$(NF-3)]++}END{for(ip in heike)
print heike[ip]"      "ip }'
secure-20161219|sort -nr

68652     
218.65.30.25

34326     
218.65.30.53

21201     
218.87.109.154

18065     
112.85.42.103

17164     
112.85.42.99

17163      218.87.109.151

17163     
218.87.109.150

2

[root@小马过河 machangwei]# awk '{print $1}' access.log|sort|uniq -c|sort -nr|head

12049
58.220.223.62

10856
112.64.171.98

1982
114.83.184.139

1662
117.136.66.10

1318
115.29.245.13

961
223.104.5.197

957
116.216.0.60

939
180.111.48.14

871
223.104.5.202

869
223.104.4.139

3.

方法一:

[root@小马过河 machangwei]# awk '{i=i+$10}END{print i}' access.log

2478496663

方法二:

[root@小马过河 machangwei]# sh tt

2478496663

[root@小马过河 machangwei]# cat tt

#!/bin/bash

awk '{a[$1]++}{for (b in a)print b}' access.log
>/machangwei/xiaoma

for i in 'cat /machangwei/xiaoma'

do

awk -v i="BASH"  '/i/{d=d+$10}END{print d}'
/machangwei/access.log

done

4.

[root@小马过河 machangwei]# awk '{a[$1]=a[$1]+$10}{for(b in a)print b,a[b]}'
access.log |head

101.226.61.184 24662

101.226.61.184 25188

101.226.61.184 25188

27.154.190.158 3084

101.226.61.184 32579

27.154.190.158 3084

101.226.61.184 32579

27.154.190.158 3084

114.94.29.165 491

101.226.61.184 44091

[root@小马过河 machangwei]# seq 20|sort

1

10

11

12

13

14

15

16

17

18

19

2

20

3

4

5

6

7

8

9

[root@小马过河 machangwei]# seq 20|sort -nr

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

4.11 ----------awk识别花括号加条件----

awk --posix '/[0-9]{1,5}/' secure-20161219

awk
--re-interval '/[0-9]{1,5}/' secure-20161219

假如现在有个文本,格式如下:

a  1

b  3

c  2

d  7

b  5

a  3

g  2

f  6

d  9

即左边是随机字母,右边是随机数字,要求写个脚本使其输出格式为:

即将相同的字母后面的数字加在一起,按字母的顺序输出。

a  4

b  8

c  2

d  16

f  6

g  2

4.12 ----- a[$1]=a[$1]+$2-----

功能:某一列变化的有重复的内容对应另一列变化的数,将这个同一个东西的对应值累加并将两者对应打印出来

[root@小马过河 machangwei]# awk '{a[$1]=a[$1]+$2}END{for (b in a)print a[b],b }'
cc

4 a

8 b

2 c

16 d

6 f

2 g

awk '{a[$1]=a[$1]+$2}END{for (b in a)print
a[b],b }' cc

{a[$1]=a[$1]+$2:
数组中很多变量,$1中第i个变量加上$2赋值给后一个第i个变量,实现第i个变量对应的$2的统计和,然后将统计和作为变量i的值

for (b in a) :     定义变量在数组a里

print a[b],b :     打印变量值,变量

4.13 5. ip出现次数及使用流量

[root@oldboyedu-40 files]# awk '{count[$1]++;sum[$1]+=$10}END{for(pol in count)print pol,count[pol],sum[pol]}' access.log |column -t|sort -rnk3 |head 
114.83.184.139   1982   31362956
117.136.66.10    1662   22431302
116.216.30.47    506    21466000

[root@oldboyedu-40-nb files]# awk 'BEGIN{print
"访问次数","使用流量","ip地址"}{ss[$1]++;mm[$1]+=$10}END{for(nn
in mm)print ss[nn],mm[nn],nn}' access.log |sort -n|column -t|head

访问次数  使用流量  ip地址

1        
0         101.226.65.105

1        
0         110.75.105.135

1        
0         110.75.105.47

1        
0         110.75.87.144

[root@小马过河 machangwei]# awk '{ips[$1]++;sum[$1]+=$10}{for(b in ips)print
b,ips[b],sum[b]}' access.log |head

101.226.61.184 1 24662

101.226.61.184 2 25188

[root@files]# awk
'{sums[$1]+=$10;sus[$1]++}END{for (sum in sums) print " 访问ip===> " sum " ip访问次数=====> " sus[sum] "
每次访问的流量
"sums[sum]/sus[sum]/1024"K" 
" 总流量:
"sums[sum]}' access.log |sort -nrk6 | head |column -t

访问ip===>  182.18.102.159   ip访问次数=====>  3   每次访问的流量  242.575K  总流量:  745189

访问ip===>  180.97.182.222   ip访问次数=====>  1   每次访问的流量  185.885K  总流量:  190346

访问ip===>  124.156.66.72    ip访问次数=====>  2   每次访问的流量  185.791K  总流量:  380500

访问ip===>  223.104.211.140  ip访问次数=====>  2   每次访问的流量  130.531K  总流量:  267327

访问ip===>  101.86.13.161    ip访问次数=====>  17  每次访问的流量  97.4069K  总流量:  1695660

访问ip===>  101.87.174.78    ip访问次数=====>  42  每次访问的流量  95.2861K  总流量:  4098063

访问ip===>  202.111.6.229    ip访问次数=====>  3   每次访问的流量  95.2354K  总流量:  292563

访问ip===>  61.171.38.1      ip访问次数=====>  74  每次访问的流量  92.072K   总流量:  6976851

访问ip===>  66.249.82.181    ip访问次数=====>  3   每次访问的流量  84.0768K  总流量:  258284

访问ip===>  125.86.90.242    ip访问次数=====>  19  每次访问的流量  82.5421K  总流量:  1605939

效果图

不用两个for就是这样,不好放在一起

4.14 ------awk 中的begin----------

可以|""里里面加内容,先begin,再中间,再end,如果|加在整个命令前面,begin里的内容也会加入,比如排序

[root@oldboyedu-40 files]# awk 'BEGIN{print "ip","count"}{count[$1]++}END{for(pol in count)print pol,count[pol]|"sort -rnk2"}' access.log  |head |column -t 
ip              count
58.220.223.62   12049
112.64.171.98   10856
114.83.184.139  1982
117.136.66.10   1662
115.29.245.13   1318
223.104.5.197   961
116.216.0.60    957
180.111.48.14   939
223.104.5.202   871

4.15 ------------awk版本4以上有替换功能-----

[root@小马过河 machangwei]# awk --version

GNU Awk 3.1.7

Copyright (C) 1989, 1991-2009 Free Software Foundation.

This program is free software; you can
redistribute it and/or modify

it under the terms of the GNU General Public
License as published by

the Free Software Foundation; either version 3 of
the License, or

(at your option) any later version.

This program is distributed in the hope that it
will be useful,

but WITHOUT ANY WARRANTY; without even the implied
warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.  See the

GNU General Public License for more details.

You should have received a copy of the GNU General
Public License

along with this program. If not, see
http://www.gnu.org/licenses/.

第5章 ---------总结大集合-----

cpu一个内核同时只能做一个事情,我们看到他做很多事是因为它不断切换的。比如一个人做会这件事,做会儿那件事,把做事时间无限缩短,相当于同时在做很多事情。

reinstall

5.1 -------查看端口总结  踢死了妮妮(tslnn)-------

查看端口是否开启五个:踢死了妮妮(tslnn),telnet,ss(netstat),lsof,nmap,nc

查看22端口是否开启  
1.telnet 
telnet 10.0.0.200 22 
2.ss 
ss -lntup|grep 22 
ss === netstat 
3.lsof 
lsof -i:22 
4.nmap 
[root@oldboyedu-40 files]# nmap -p22 10.0.0.200
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds
[root@oldboyedu-40 files]# nmap -p25 10.0.0.200
PORT   STATE  SERVICE
25/tcp closed smtp

Nmap done: 1 IP address (1 host up) scanned in 2.61 seconds

5.
[root@oldboyedu-40 files]# nc 10.0.0.200 22
SSH-2.0-OpenSSH_5.3

Protocol mismatch.

ps -ef |grep sshd #进程是否在运行

yum install telnet tree lrzsz  nmap nc  dos2unix -y

5.2 ----------- 排查无法上网总结  3p-----

2)linux无法上网
   1]  ping

www.baidu.com

#是否能上网
   2]  ping

223.5.5.5

#DNS是否有问题
   3]  ping 网关          #

--------查看系统默认网关
route -n  =====

ifconfig 
ip a 
ifconfig eth0 
ip a s eth0 
ip address show eth0

route -n
ip route
ip r

5.3 --------------  vi/vim快捷方式总结----

vi/vim快捷方式

移动光标:

快速的达到文件的最后一行 G(shift+g)

快速达到文件的第一行     gg

快速达到文件的第100行 100gg     :100

移动光标到行首       0 ^

移动光标到行尾       $

编辑:

复制                               yy

粘贴                               p

剪切/删除当前行                    dd

删除光标所在位置到文件的最后一行   dG

删除光标所在位置到行尾             D  
=== d$

把光标移动到文件的结尾并进入编辑模式   A

在当前行下面插入一个空行并进入编辑模式 o(小写字母O)

删除光标所在位置的一个字符         x

撤销                               u

查找替换:

:1,10s#oldboy#oldgirl#g

:.,$s#oldboy#oldgirl#g    #.表示当前行

:%s#oldboy#oldgirl#g     
#1,$====%

查找替换移动:

:1,10s#oldboy#oldgirl#g

:.,$s#oldboy#oldgirl#g    #.表示当前行

:%s#oldboy#oldgirl#g     
#1,$====%

:1,5m[ove]10              #从第一行到底5行移动到第10行

:1,5co[py]10              #从第一行到底5行复制到第10行

批量操作:(可视块模式)

ctrl+v

ctrl+v 按I 编辑 
按esc

其他:

/搜索的内容   继续搜索n    继续向上搜索N

显示行号     :set nu

取消显示行号 :set nonu

s

5.4 ---sed总结--------

1.sed '找谁干啥'

删改查

d s p

5.5 ------awk总结---------

3.awk '找谁{干啥}'

NR==1

NR==1,NR==20

正则表达式

/oldboy/

$2~/oldboy/

NR>=20

$3>20

print

gsub(/找谁/,"替换为什么",在哪个部分)

计算

i=i+1  
i++

i=i+$2 
i+=$2

h[$1]=h[$1]+1   h[$1]++

h[$1]=h[$1]+$2  h[$1]+=$2

[root@oldboyedu-40 files]# awk
'BEGIN{for(i=1;i<=100;i++) sum=sum+i;print sum}'

5050

2.shell

变量分类

read

循环和判断

5.6 ------rename-----

[root@小马过河 ~]# rename bb "cc" bb

[root@小马过河 ~]# ls

1.txt            c    
d035      ett.txt  install.log         lrzsz-0.12.20.tar.gz  passwd.txt 
stu.sh

2.txt           
cc    data      f032    
install.log.syslog  ma                    person.txt  tandao

anaconda-ks.cfg 
d032  download  f035    
lrzsz-0.12.20       machangwei            services    x.t

[root@小马过河 ~]# rename x "e" *.t

[root@小马过河 ~]# ls

1.txt           
c     d035      e.t     
f035                lrzsz-0.12.20         machangwei  services

2.txt           
cc    data      ett.txt 
install.log         lrzsz-0.12.20.tar.gz  passwd.txt 
stu.sh

anaconda-ks.cfg 
d032  download  f032    
install.log.syslog  ma                    person.txt  tandao

别人给的一道题:第三行求和

[root@db01 ma]# vim ma.txt
sojfopsjfpsj
sfjpsjpf

方法一:

[root@db01 ma]# sed -n "3s#.#&\n#gp" ma.txt|awk '{i=i+$0}END{print i}'
12

  

方法二:

[root@db01 ma]# vim 3.sh
sum=0
shu=`awk NR==3 ma.txt|wc -L`
for i in `seq 1 $shu`
do
j=` awk NR==3 ma.txt|cut -c $i`
let sum=sum+j
done
echo $sum

  

sed-awk命令详解的更多相关文章

  1. linux awk命令详解

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  2. linux awk命令详解,使用system来内嵌系统命令, awk合并两列

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  3. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  4. awk命令详解二

    awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: ...

  5. shell编程之awk命令详解

    shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...

  6. [Linux] linux awk命令详解

    reference : http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于g ...

  7. [Linux] AWK命令详解(大全)

    转载自:http://caoyanbao.iteye.com/blog/570868 什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk ...

  8. Linux之awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. inux awk命令详解

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编 ...

  10. Ubuntu 14.10 下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

随机推荐

  1. Git错误

    $ rm -rf .git $ git config --global core.autocrlf  false $git init $git add . ---------------------- ...

  2. [HP-UNIX]bdf命令总结

    (1)bdf命令的效果 lijiaman$[/home/oracle]bdf Filesystem kbytes used avail %used Mounted on /dev/vg00/lvol3 ...

  3. mysql存储过程和函数(一)

    存储过程和函数是事先经过编译并存储在数据库的一段sql语句集合,调用存储过程和函数可以简化应用程序开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对提高数据运行效率是有好处的. 存储过程和 ...

  4. java HtmlEmail发送邮件工具类

    package com.sh.xrsite.common.utils; import java.io.File; import java.util.HashMap; import java.util. ...

  5. Vue插槽 slot

    1. 什么是插槽 插槽slot 是往父组件中插入额外内容,实现组件的复用,一个插槽插入到一个对应的标签中 2. 实例: 一个组件中不允许有两个匿名插槽 </head> <body&g ...

  6. vi-vim常用命令

    vi-vim常用命令 1 简介 在UNIX系统中,创建和修改配置文件.shell脚本.初始化文件.编写程序都离不开VI. 1      vi[1]属于两个主要的UNIX规范:POSIX和单一UNIX规 ...

  7. python学习之面向对象程序设计的一些思考

    将属于一类的对象放在一起: 如果一个函数操纵一个全局变量,那么两者最好都在类内作为特性和方法实现. 不要让对象过于亲密: 方法应该只关心自己实例的特性,让其他实例管理自己的状态. 简单就好: 让方法小 ...

  8. Python学习:3.Python学习基础

    Python基础概念 一.编码 Python解释器加载.py文件中的代码的时候,对内容进行编码,在Python2.x中默认使用的是ASCII,因此我们使用Python2.x版本输出中文的时候,会出现以 ...

  9. My First Marathon【我的第一次马拉松】

    My First Marathon A month before my first matathon, one of my ankles was injured and this meant not ...

  10. 自定义vim配置文件vimrc,用于c/c++编程

    vim作为Linux下广受赞誉的代码编辑器,其独特的纯命令行操作模式可以很大程度上方便编程工作,通过自定义vim配置文件可以实现对vim功能的个性化设置. vim配置文件一般有两份,属于root的/e ...