第六章,文本处理工具和正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六章,文本处理工具和正则表达式相关的知识,希望对你有一定的参考价值。

更多笔记点击查看

Linux学习从入门到打死也不放弃,完全笔记整理(持续更新)

http://blog.51cto.com/13683480/2095439


笔记整理起始时间:2018年4月7日14:15:07

 

本章内容:

各种文本工具来查看、分析、统计文本

cat,tac,rev,more,less,head,tail,cut,paste,wc,uniq,sort,diff

grep

正则表达式

扩展正则表达式

vim

 

支持标准输入的命令|

        cat tr mail bc

        more less head tail cut wc sort uniq grep

 

抽取文本的工具

        文本内容:less和cat

        文本截取:head和tail

        按列抽取:cut

        按关键字抽取:grep

        

文件查看命令:

        cat,tac,rev

        cat -E           显示行结束符$

               -n           对显示出的每一行进行编号

               -A          显示所有控制符

               -b          非空行编号

               -s           压缩连续的空行成一行

        tac file    上下反向查看文件

        rev file    左右反向查看文件

 

分页查看文件内容:

        more:                 分页查看文件

        more -d file    显示翻页及退出提示

        less                 一页一页地查看文件或stdin输出

               查看时有用的命令包括:

               /文本       搜索文本

               n/N        跳到下一个或上一个匹配

               less命令为man命令默认使用的分页工具

        

显示文本前或后行内容

        head file         默认查看文件前10行

               -c1000           指定获取前1000字节

               -n#               指定获取前#行

               -#                 指定前#数 (跟-n#好像没什么不同)

        

        tail file            默认查看文件后10行

               -c50              指定获取后50个字节

               -n#               指定获取后#行

               -#                  指定获取后#行

               -f                   跟踪显示文件fd新追加的内容,常用于日志监控

                                           但是文件如果被删除,无法发现

               -F                   跟踪文件名,相当于--follow=name  --retry

                                           当文件被删除时会受到提示

        tailf file          类似于tail -f,当文件不增长(比如删除)时并不访问文件

 

按列抽取文本cut,合并文件paste

        cut [option]...[file]...

               -d“”          指明分隔符,默认tab

               -f filed    指明第几列

                     #                   第#个字段

                     1,5                 第1和第5列

                     1-5                第1-5列

                     1-3,5             第123,5列

               -c1-15,              按字符切割

               

               cut -d: -f6-7 /etc/passwd     

                     以冒号为分隔符取/etc/passwd的第6-7列

               cut -d: -f1,7 /etc/passwd /etc/shadow|cat -n

                     以冒号为单位/etc/passwd和/etc/shadow的第1和第7列 且显示行数

                      --output-delimiter=STRING        指定输出分隔符

               如:

                     cut  -d: -f1-3 [email protected]  /etc/passwd

                            以:为分隔符取etc/passwd 第1-3列,且输出以@为分隔符

        

               cut -c1-14,30-45 /etc/profile

                     取/etc/profile 每行1-14 30-45个字符

        

        paste [option]...[file]...     合并两个文件同行号的列到一行

               -d"" 指定分隔符,默认用tab

               -s          所有的行合成一行显示

               paste f1 f2             行合并

               paste -s f1 f2       列显示变行显示

 

分析文本的工具:

        wc:文本数据统计

               计算单词总数,行总数,字节总数和字符总数

               可以对文件或者stdin中的数据运行

               wc /etc/profile

                     76           252       1795       /etc/profile

                     行数       单词数    字节数

               常用选项

                     -l     只计算行数

                     -w   只计算单词总数

                     -c 只计算字节总数

                     -m 只计算字符总数

                     -L 显示文件中最长行的长度

        

        sort:文本排序sort

               把整理过的文本显示在stdout,不改变原始文件

               sort files       默认是按字符排序文件

               常用选项:

                     -r   反向排序

                     -R   随即排序

                     -n   执行按数字大小整理

                     -f    选项忽略(fold)字符串中的字符大小写

                     -u   选项(独特,unique)删除输出中的重复行

                     -t"#"       使用#作为字段界定符

                     -k"X"      按照使用#字符分隔的第X列来整理,能够使用多次

               例:

                     cut -d: -f1-3  /etc/passwd|sort -t: -k3 -n

                            以:为分隔符取/etc/passwd前3列,且按照uid数字大小排序

 

uniq命令:

        uniq:从输入中删除前后相接的重复的行

        uniq [option]...[file]...

               -c            显示每行重复出现的次数

               -d          仅显示重复过的行

               -u        仅显示不曾重复的行

               注意:连续且完全相同方为重复

        常和sort命令一起配合使用:

               sort userlist.txt |uniq -c

                    

比较文件:

        比较两个文件之间的区别

               diff file1 file2

                     比较文件,会标记不同的行

                             1,51c1,51,表示1-51行有区别

               diff命令的输出被保存在一种叫做“补丁“的文件中

                     使用  -u  选项来输出“统一的(unified)"diff格式文件,最适合用于补丁文件

               patch 复制在其他文件中进行的改变(要慎重使用)

                     适用  -b 选项来自动备份改变了的文件

               例:

               diff -u f11 f22 > f33.diff

               rm -rf file1

               patch -b f22 f33.diff

                     使用f11 f22的diff文件f33.diff恢复f11文件

                            原f22文件会被改名备份为f22.orig,f22文件即为原f11文件

               

练习1:

        1.找出ifconfig 网卡名 命令结果中本机的IPv4地址

               ifconfig ens33|head -n2|tail -n1|tr -s " " |cut -d" "  -f3

        2.查出分区空间使用率的最大百分比值

               df|tr -s " " "%"|cut -d"%" -f5|sort -nr|head -n2|tail  -n1

        3.查出用户UID最大值的用户名、UID及shell类型

               cat /etc/passwd|cut -d: -f1,3,7|sort -nr -t":" -k2|head  -1

        4.查出/tmp的权限,以数字方式显示

               stat /tmp|head -n4|tail -1|cut -d: -f2|tr -dc "[:digit:]\n"

        5.统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

               netstat -nt|tr -s " "|cut -d" " -f5|uniq -c|tr -s ' ' |sort -nr  

               -c"" -k2

               cat access_log |cut -d' ' -f1|sort|uniq -c|sort -nr

 

Linux文本处理三剑客

        grep:文本过滤(模式:pattern)工具

               grep,egrep,fgrep(不支持正则表达式搜索)

        sed:stream editor,文本编辑工具

        awk:linux上的实现gawk,文本报告生成器

 

grep:Global search  Regular expression and Print out the line

        作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查

               打印匹配到的行

        模式:由正则表达式字符及文本字符所编写的过滤条件

        grep [options] pattern [file]...

               例:

               grep root /etc/passwd          在/etc/passwd 中搜索含有root的行并输出

               grep "$USER" /etc/passwd    在/etc/passwd中搜索当前用户,并输出行

               grep '$USER' /etc/passwd    在/etc/passwd中搜索字符$USER,并输出行

               grep `whoami`  /etc/passwd 支持命令调用如`whoami`

               ls |grep ok                                 在ls的输出结果中匹配含有“ok”的选项并输出

        

        --color=auto:      对匹配到的文本着色显示

        -v                          取反,显示不被pattern匹配到的行

        -i                           忽略字符大小写

        -n                         显示匹配的行数

        -c                          统计匹配的行数,仅显示行数,不输出匹配到的信息

        -o                         仅显示匹配到的字符串

        -q                         静默模式,不输出任何信息,

                                    结果存在变量 $? 中,有匹配为0,没有匹配为1

        -A#:after         连同匹配到的行数的后#行一起输出

        -B#:befor           连同匹配到的行数的前#行一起输出

        -C#:context 前后#行一起输出

        -e:                     实现多个选项间的逻辑or关系

               grep -e 'cat' -e 'dog' file

        -w                         匹配整个单词,仅包含的不输出,如只匹配roo,就不会输出root

                                    字母数字下划线都算单词的一部分,其他符号为分隔符

        -E                          使用ERE(扩展正则表达式)

        -F                          相当于fgrep,不支持正则表达式

        

        grep -f  file 匹配文件中的pattern,或关系

        i 特殊显示,会在行首显示文件名

        $?,存储上一个命令的返回值,ture为 0,错误为非0

        

正则表达式:

        man 7 regex

        regexp:由一类特殊字符及文本字符所编写的模式(pattern),其中有些字符

        (元字符)不表示字符字面意义,而表示控制或通配的功能

        程序支持:grep,sed,awk,vim,less,nginx,varnish等

        分两类:

               基本正则表达式:BRE

               扩展正则表达式:ERE

                     grep -E ,  egrep支持扩展正则表达式

        正则表达式引擎:

               采用不同算法,检查处理正则表达式的软件模块

               PCRE(Perl Compatible Regular  Expreesions)

        元字符分类:

               字符匹配,匹配次数,位置锚定,分组

        

字符匹配:

               .                     匹配任意单个字符

               [abcA-Z1-5]    匹配指定范围内的任意单个字符

               [^abc]             匹配指定范围外的任意单个字符

               [:alnum:] 字母和数字

               [:alpha:]  代表任何英文大小写字符,A-Z,a-z

               [:lower:]  小写字母

               [:upper:]  大写字母

               [:digit:]    十进制数字

               [:xdigit:]   十六进制数字

               [:blank:]  空白字符(空白和制表符)

               [:space:]  水平和垂直的空白字符(比[:blank:]包含的范围广)

               [:cntrl:]     不可打印的控制字符(退格,删除,警铃。。。)

               [:graph:]  可打印的非空白字符

               [:print:]    可打印字符

               [:punct:]  标点符号

        例:

               ls|grep ...      显示所有三个字符,多余部分不会标红

               ls|grep "..."     显示3个字符组成的单词

        

        ps:[.]放在中括号里面就是.本身

匹配次数:

        用在要指定次数的字符后面,用于指定前面的字符要出现的次数

               *              匹配前面的字符任意次,包括0次

                                    贪婪模式:尽可能长的匹配

               .*             任意长度的任意字符

               \?           匹配其前面的字符0次或1次

               \+           匹配其前面的字符至少1次

               \{n\} 匹配前面的字符n次

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

               \{,n\}        匹配前面出现的字符至多n次

               \{n,\}        匹配前面出现的字符至少n次

               

位置锚定:

        定位出现的位置

               ^                                  行首锚定,用于模式的最左侧

               $                                  行尾锚定,用于模式的最右侧

               ^pattern$                     用于模式匹配整行

                     ^$                               空行

                     ^[[:space:]]*$         空白行

               \< \b                            词尾锚定,用于单词模式的左侧

               \> \b                            词尾锚定,用于整个单词的右侧

               \<pattern\>                  匹配整个单词

 

分组:

        \(\)   将一个或者多个字符捆绑在一起,当做一个整体进行处理,如:

               \(root\)\+               匹配root最少出现一次

                     echo rootroot  |grep -o  "\(root\)\+"

        分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中

        这些变量的命名方式为;\1, \2, \3...

                     echo rootpppproot|grep -o  "\(root\).*\1"

        \1    表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

        示例:

               \(string1\+\(string2\)*\)

                     \1:string\+\(string2\)*

                     \2:string2

               后项引用:引用前面的分组括号中的模式所匹配的字符,而非模式本身

        

        或者:\|

               示例a\|b a或b

               C\|cat             C或cat

               \(C\|c\)at Cat或cat

 

练习2:

        1.显示/proc/meminfo文件中以大小s开头的行(要求使用两种方法)

               cat /proc/meminfo |grep -i ^s

               cat /proc/meminfo |grep "\(^s.*\)\|\(^S.*\)"

        2.显示/etc/passwd文件中不以/bin/bash结尾的行

               cat /etc/passwd|grep -v "/bin/bash\>"

        3.显示用户hello默认的shell程序

               getent passwd hello|cut -d: -f7

               getent passwd hello|grep -o "/.*\>"

        4.找出/etc/passwd文的两位或三位数

               cat /etc/passwd|grep -o "\<[0-9]\{2,3\}\>"|cat -n   

        5.显示Centos7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面

        有非空白字符的行

               cat /etc/grub2.cfg|grep "^[[:space:]]\+.*..*$"

        6.找出"netstat-tan"命令结果中以LISTEN后跟任意多个空白字符结尾的行

               netstat -tan|grep "LISTEN[[:space:]]\+$"

        7.显示CentOS7上所有系统用户的用户名和UID

               getent passwd|cut -d: -f1,3

        8.添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin)

        找出/etc/passwd用户名和shell同名的行

               getent passwd|grep "^\(..*\)\>.*\<\1$"

        9.利用df和grep,取出磁盘各分区利用率,并从大到小排序

               df|grep dev/sd|tr -s ' ' |cut -d' ' -f1,5|sort -t' ' -k2  -nr

                     保留磁盘名称

               df|grep dev/sd|grep -o "[0-9]\+%"|sort  -nr

                     不保留磁盘名称

 

egrep:

        egrep = grep -E

        egoup [options] pattern [file...]

        支持扩展的正则表达式

               

扩展的正则表达式的元字符:

        字符匹配:

               .                     任意单个字符

               [abc]               指定范围的字符

               [^abc]            不在指定范围的字符

               [:alnum:] 。。。。

        

        次数匹配:

               *                     匹配前面字符任意次

               ?                   匹配前面字符0或1次

               +                    1次或多次

               {m}                匹配m次

               {m,n}             至少m次,至多n次

        

        位置锚定:

               ^                   行首

               $                   行尾

               \< \b              单词首

               \> \ba             单词尾

        

        分组:

               ()               分组

               \1,\2              后项引用

        或者:

               a|b                 a或者b

               C|cat              C或cat

               (C|c)at    Cat或cat

        

练习3:

        1.显示三个用户root、mage、wang的UID和默认shell

               cat /etc/passwd|egrep "^(root)\>|^(hello)\>|^(lily)"|cut -d:  -f1,3,7

               getent passwd root hello lily|cut -d: -f1,3,7

        2.找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟

        一个小括号的行

               cat /etc/rc.d/init.d/functions |egrep  "^[[:alpha:]]+.*\>\(\)"

        3.使用egrep取出/etc/rc.d/init.d/functions中其基名和目录名

               echo /etc/init.d/functions/ |egrep -o  "\<[[:alpha:]]+/?$"

               echo /etc/init.d/functions |egrep -o  "/.*\>/"

        5.统计last命令中以root登录的每个主机IP地址登录次数

               last|egrep "^root\>"|tr -s ' ' |cut -d' ' -f3|sort|uniq  -c

        6.利用扩展正则表达式分别表示0-9,10-99,100-199,200-249,250-255

               [0-9]       [1-9][0-9] 1[0-9][0-9]    2[0-4][0-9]      25[0-5]

        7.显示ifconfig命令结果中所有ipv4地址

               ifconfig |egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

               ifconfig |egrep -o "\<(([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"  

        8.将此字符串:welcome to magedu linux  中的每个字符去重并排序,重复次数

        多的排到前面

               echo welcome to magede linux|tr -d ' '|grep -o  .|sort|uniq -c|sort -nr

 

               

vim简介:

        vi:visual interface,文本编辑器

        文本:ASCII,unicode

        文本编辑种类:

               行编辑器:sed

               全屏编辑器:nano,vi

               vim:vi improved

        其他编辑器:

               gedit       一个简单的图形编辑器

               gvim       一个vim编辑器的图形版本

 

vim:打开文件

        vim [option]...file...

               vim +# file             打开文件后,让光标处于第#行的行首,

                     +                   默认最后一行的的行首

               +/pattern              打开文件后,直接让光标处于第一个被pattern匹配到的

                                           行的行首

               -b   file          二进制方式打开文件

               -d file1 file2... 比较多个文件,会显示不同的位置

               -m file          只读打开文件

        ex file 或者vim -e       直接进入ex模式

        如果该文件存在,文件被打开并显示内容

        如果该文件不存在,当编辑后第一次存盘时创建文件

 

vim:模式

        三种主要模式:

               命令(normal)模式:默认模式,移动光标,剪切/粘贴文本

               插入(insert)或编辑(edit)模式:修改文本

               扩展命令(extended command)模式:保存,退出等

        R:改写模式

        Esc键退出当前模式

        ese ese 总是返回到命令模式

        

模式转换:

        命令模式-->插入模式

               i:insert,在光标所在处输入

               I:在当前光标所在行的行首输入

               a:append,在光标所在处后面输入

               A:在当前光标所在行的行尾输入

               o:在当前光标所在行的下方打出一个新行

               O:在当前光标所在行的上方打开一个新行

        

        插入模式-->命令模式

               Esc

        

        命令模式-->扩展命令模式

               :

        

        扩展命令模式-->命令模式

               Esc,enter

 

关闭文件:

        扩展模式:

               :q                 退出

               :q!         强制退出,丢弃做出的修改

               :wq              保存退出

               :x                 保存退出

        命令模式:

               ZZ                 保存退出

               ZQ                不保存退出

 

扩展模式:

        :进入ex模式

        创建一个命令提示符:处于底部的屏幕左侧

        命令:

               w                   写(存)磁盘文件

               wq                  写入并退出

               x                     写入并退出

               q                   退出

               q!                 不存盘退出,即使更改都将丢失

               r filename       读文件内容到当前文件中

               w filename      将当年文件内容写入另一个文件

               !cmd               执行命令

               r!cmd             读入命令的输出

 

命令模式光标跳转:

        字符间跳转:

               h:   左     

               l:    右

               j:    下

               k:    上

               #command:跳转由#指定的个数的字符

                     比如33j,向下跳33行

        

        单词间跳转:

               w:下一个单词的词首

               e:当前或下一个单词的词尾

               b:当前或前一个单词的词首

               #cmd:由#指定一次跳转的单词数

        

        当前页跳转:

               H: 页首

               M:页中间行

               L:   页底

        

        行首行尾跳转:

               ^:    跳转至行首的第一个非空白字符

               0:   跳转至行尾

               $:     跳转至行尾

        

        行间移动:

               ##G,(扩展模式:#):      跳转至由##指定行

               G:                                     最后一行

               1G,gg                                  第一行

        

               句间移动

                     )      下一句

                     (      上一句

        

        段落间移动:

               }      下一段

               {      上一段

        

命令模式:

        翻屏操作:     

               ctrl+f             向文件尾部翻一屏

               ctrl+b            向文件首部翻一屏

               ctrl+d            向下半屏

               ctrl+u           向上半屏

        

        字符编辑:

               x                     删除光标处字符

               #x                  删除光标处起始的#个字符

               xp                   交换光标所在处的字符及其后面字符的位置

               ~                    转化大小写

               J                     删除当前行后的换行符

        

        替换命令:

               r                     替换光标所在处的字符

               R                  切换成Replace,改写模式

        

        删除命令:

               d                    删除命令,可结合光标跳转字符,实现范围删除

               d$                  删除至行尾

               d^                  删除到非空行首

               d0                  删除到行首

               dw                  向右删除一个单词

               de                  向右删除一个单词

               db                  向左删除一个单词

        dd                  删除光标所在的行

               #dd:      多行删除

               D                    从当前光标位置一直删除到行尾,留空行,等同于d$

 

        

        复制命令:

               y                    复制,行为相似于d命令

               y$                   从光标处复制到行尾

               y0                   从光标处复制到行首

               y^                  复制到非空行首

               ye                   拷贝后一个单词

               yw

               yb                  拷贝前单词

        yy                   复制整行

               #yy         复制多行

        Y                    复制整行

        

        粘贴命令:

               p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴

                     至当前光标所在处的后面

               P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴

                     至当前光标所在处的前面

        

        改变命令:

               c:修改后切换成插入模式

               

               命令模式--->插入模式

                     c$           删除至行尾,并切换成插入模式

                     c^

                     c0

                     cb

                     cw

                      #command

               cc                   删除当前行并输入新内容

                     #cc         多行删除并输入新内容

               C                    删除当前光标到行尾,并切换成插入模式

               

        其他操作

               100iwang【esc】         粘贴wang  100次

               <stat position><command><end  position>

                      command:

                            y 复制    d 删除   gU 变大写 gu 变小写

                     例如:

                     0y$  命令意味着:

                     0     先到行头

                     y     从这里开始拷贝

                     $     拷贝到本行最后一个字符

                             ye:从当前位置拷贝到本单词的最后一个字符

 

扩展命令模式:

        地址定界:

               :start_pos,end_pos

               :#  (y,d..)              具体第几行,例如:2表示第2行,可以直接进行复制、删除等

               :#,@(y,d..) 从第#行起,到第@行止,执行命令

               :#,[email protected](y,d..)      从第#起,到第#[email protected]

                                           如:2+5,表示从第2行到第7行

               :.                        表示当前行

               :$                        最后一行

                     .,$-1 当前行到倒数第二行

               :%                 全文

                     如:%d   删除全文

        

        匹配:支持正则表达式

               /pat1/,/pat2/   

                     从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束

               #,/pat/           第#行到被匹配行

               /pat/,$            被匹配行到最后一行

               使用方式:后跟一个编辑命令

                     d

                     y

                     w file             将范围内的行另存至指定文件中

                     r file        在指定位置插入指定文件中的所有内容

        查找:

               /pattern  从光标处向文件尾部查找

               ?pattern        从光标处向文件首部查找

               n:          与命令同方向,下一个

               N:         与命令反方向,上一个

               

        查找并替换:

               s      在扩展模式下完成查找替换操作

                     格式:

                            定界#.#s/要查找的内容/替换为的内容/修饰符

                                    %s/haha/xixi/i

                     要查找的内容:可以使用模式

                      替换为的内容:不能使用模式,但可以使用\1,\2,等后项引用符号

                            还可以使用&引用前面查找时查找到的整个内容

                            如:

                                   1,5s/haha/&ya/    

                                           将1-5行的haha替换成hahaya

                                    %s/^\(UUID\)/#\1/   

                                           将UUID开头的行加注释,(替换成#UUID)

                                    52s/\(feee\)/\1\1/

                                           将第52行的feee替换成feeefeee

                     修饰符:

                            i:忽略大小写

                             g:全局替换;默认情况下,每一行只替换第一次出现的匹配

                             gc:全局替换,每次替换前询问

                    

                     查找替换中的分隔符/可替换为其他字符

                            例如:

                                    [email protected]/[email protected]/etc/[email protected]

                                    s#/boot#/root#i

练习4:

        1.复制/etc/profile至/tmp/目录,用查找替换命令删除/emp/profile文件中

        的行首的空白字符

               :%s/^[[:space:]]\+//

        2.复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为

        /tmp/functions的每行开头为空白字符的行的行首添加一个#号

               :%s/^\([[:space:]]\+\)/#\1/

               

命令模式:撤销更改

        u            撤销最近的更改

        #u         撤销之前多次更改

        U             撤销光标落在这行后所有此行的更改

        ctrl -r     重做最后一次的“撤销”更改(取消撤销)

        .             重复前一个操作

        n.           重复前一个操作n次

        

vim的寄存器:

        vim有26个命名寄存器和1个无名寄存器,常存放不同的剪贴板内容,可以不同

        会话间共享

               (需要复制之后关掉会话然后在另外一个会话使用p,或者复制之后重新打开新会话复制。可能。。。)

        寄存器名称a,b,c...z,

               格式:

                     "寄存器名     放在数字和命令之间

               如:

                     3"tyy       表示复制3行到t寄存器中

                     "tp          表示将t寄存器的内容粘贴

        

        未指定,将使用无命名寄存器

        有10个数字寄存器,用0,1,2,..,9表示,0存放最近删除内容。1存放最近删除内容,

        当新的文本变更和删除时,1转存到2,2转存到3,以此类推,数字寄存器不能在

        不同会话间共享

        

        编辑二进制文件:

               以二进制方式打开文件:

                     vim -b  binaryfile

               扩展命令模式下,利用xxd转换为可读的十六进制

                     :%!xxd

               编辑二进制文件

               扩展命令模式下,利用xxd命令转换回二进制

                     :%!xxd  -r

               保存退出

        

可视化模式:

        允许选择的文本块:

               v            面向字符

               大V         面向行

               ctrl+v     面向块

        可视化键可用于与移动键结合使用:

               w )}      箭头等

        突出显示的文字可被删除,复制,变更,过滤,搜索,替换等

        

多文件模式:

        vim file1 file2 file3.。。

               :next            下一个

               :prev            前一个

               :first             第一个

               :last              最后一个

               :wall             保存所有

               :qall             退出所有

               :wqall           保存退出所有

               

使用多个“窗口”:

        多文件分隔

               vim -o |-O file1 file2

                     -o   水平分割

                     -O 垂直分割

               在窗口间切换:ctrl+w,箭头

        

        单个文件窗口分割:

               ctrl+w,s          水平分割

               ctrl+w,v         垂直分割

               ctrl+w,q         取消相邻窗口

               ctrl+w,o         取消全部窗口

               :wqall                 存退

               

定制vim的工作特性:

        配置文件:永久有效

               全局:/etc/vimrc

               个人:~/.vimrc

        扩展模式:当前vim进程有效

        (1)行号

               显示:set number,简写为set  nu

               取消显示:set nonumber,简写为set  nonu

        (2)忽略字符的大小写

               启用:set ic

               不忽略:set noic

        (3)自动缩进

               启用:set ai

               禁用:set noai

        (4)智能缩进

               启用:set smartdent,简写set  si

               禁用:set nosi

        (5)高亮搜索

               启用:set hlsearch

               禁用:set nohlsearch

        (6)语法高亮

               启用:syntax on

               禁用:syntax off

        (7)显示tap 和换行符 ^I 和$显示

               启用:set list

               禁用:set nolist

        (8)文件格式

               启用windows格式 set  fileformat=dos

               启用unit格式:   set fileformat=unix

               简写:set ff=dos|unix

        (9)设置文本宽度

               启用:set textwidth=65(vim  only)

               禁用:set wrapmargin=15

        (10)设置光标所在行的标识线

               启用:set cursorline,简写cul

               禁用:set no cursorline

        (11)复制保留格式

               启用:set paste

               禁用:set nopaste

 

了解更多:

        set帮助

               :help option-list

               :set or set all

        vim内置帮助

        vimturor 练习文件

        

        

练习5:

        1.在vim中设置tap缩进为4个字符

               

        2.复制/etc/rc.d/init.d/functions文件至/tmp目录,替换/tmp/functions

        文件中的/etc/sysconfig/init为/var/log

               :%[email protected]/etc/sysconfig/[email protected]/var/[email protected]

        3.删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行

        的行首的#号

               :%[email protected]^#\([[:space:]]\+\)@\[email protected]

        

 

 

笔记整理完成时间:2018年4月10日18:57:14

        

        

        

        

        

 


以上是关于第六章,文本处理工具和正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

第六章:位置匹配

第十六章 在文件中搜索文本工具:grep命令 和egrep命令

Linux篇 | 文本处理工具和正则表达式

Linux篇 | 文本处理工具和正则表达式

Shell正则表达式和文本处理工具

正则表达式和文本处理工具